SELECT * FROM (
SELECT TAKEY,TACONTENT FROM TA表 
UNION ALL
SELECT TBKEY,TBCONTENT FROM TB表
UNION ALL
SELECT TCKEY,TCCONTENT FROM TB表
) T
WHERE charindex(ltrim(T.TCKEY)+' '+ltrim(T.TACONTENT),'TK')>0

解决方案 »

  1.   


    --try
    SELECT * FROM (
    SELECT TAKEY,TACONTENT FROM TA表 
    UNION ALL
    SELECT TBKEY,TBCONTENT FROM TB表
    UNION ALL
    SELECT TCKEY,TCCONTENT FROM TB表
    ) T
    WHERE charindex('TK',ltrim(T.TCKEY)+' '+ltrim(T.TACONTENT))>0 --刚才写反了..
      

  2.   

    接苦行僧理解的意思:
    TAKEY最后字母T,TACONTENT第一字母K 应该是不符合要求的吧。
    语句应改为如下:
    SELECT * FROM (
    SELECT TAKEY,TACONTENT FROM TA表 
    UNION ALL
    SELECT TBKEY,TBCONTENT FROM TB表
    UNION ALL
    SELECT TCKEY,TCCONTENT FROM TB表
    ) T
    WHERE charindex('TK',ltrim(T.TCKEY))>0 or charindex('TK',ltrim(T.TACONTENT))>0
      

  3.   

    TA表 字段是TAID,TAKEY,TACONTENT 
    TB表 字段是TBID,TBKEY,TBCONTENT 
    TC表 字段是TCID,TCKEY,TCCONTENT 查询的关键词是TK,要求查询在三个表中的TAKEY,TACONTENT,TBKEY,TBCONTENT,TCKEY,TCCONTENT,是否符合, 一次性查出记录,可以实现吗? ---
    举点例子看看
      

  4.   

    这个意思?
    select * from TA
    where charindex(TAKEY, 'TK') > 0
    union
    select * from TA
    where charindex(TACONTENT, 'TK') > 0
    union
    select * from TB
    where charindex(TBKEY, 'TK') > 0
    union
    select * from TB
    where charindex(TBCONTENT, 'TK') > 0
    union
    select * from TC
    where charindex(TCKEY, 'TK') > 0
    union
    select * from TC
    where charindex(TCCONTENT, 'TK') > 0
      

  5.   


    SELECT * FROM (
    SELECT * FROM TA
    UNION ALL
    SELECT * FROM TB
    UNION ALL
    SELECT * FROM Tc
    ) a
    WHERE charindex('TK',ltrim(TCKEY)+ltrim(TACONTENT))>0
      

  6.   

    declare @TA table(TAID int, TAKEY nvarchar(10),TACONTENT nvarchar(10))
    declare @TB table(TBID int, TBKEY nvarchar(10),TBCONTENT nvarchar(10))
    declare @TC table(TCID int, TCKEY nvarchar(10),TCCONTENT nvarchar(10))INSERT INTO @TA
    SELECT 1,'T','K' UNION ALL
    SELECT 2,'TT','AK' UNION ALL
    SELECT 3,'TK','TK' UNION ALL
    SELECT 4,'KT','TK' INSERT INTO @TB
    SELECT 5,'TR','K' UNION ALL
    SELECT 6,'TTS','AK' UNION ALL
    SELECT 7,'TKU','TK' UNION ALL
    SELECT 8,'KTP','TK' INSERT INTO @TC
    SELECT 9,'TRT','K' UNION ALL      -- 这一行没有选出来
    SELECT 10,'TTSTK','AK' UNION ALL
    SELECT 11,'TKUS','TSK' UNION ALL
    SELECT 12,'KTP','TRK' 
    SELECT * FROM (
    SELECT TAID,TAKEY,TACONTENT FROM @TA 
    UNION ALL
    SELECT TBID,TBKEY,TBCONTENT FROM @TB
    UNION ALL
    SELECT TCID,TCKEY,TCCONTENT FROM @TC
    ) T
    WHERE charindex('TK',ltrim(T.TAKEY)+' '+ltrim(T.TACONTENT))>0
    /*
    TAID        TAKEY      TACONTENT
    ----------- ---------- ----------
    3           TK         TK
    4           KT         TK
    7           TKU        TK
    8           KTP        TK
    10          TTSTK      AK
    11          TKUS       TSK
    */
      

  7.   


    SELECT * FROM (
    SELECT TAKEY,TACONTENT  FROM TA
    UNION ALL
    SELECT TBKEY,TBCONTENT FROM TB
    UNION ALL
    SELECT TCKEY,TCCONTENT FROM Tc
    ) a
    WHERE charindex('TK',ltrim(TAKEY)+ltrim(TACONTENT))>0
      

  8.   

    SELECT * FROM (
    SELECT TAKEY,TACONTENT FROM TA表 
    UNION ALL
    SELECT TBKEY,TBCONTENT FROM TB表
    UNION ALL
    SELECT TCKEY,TCCONTENT FROM TB表
    ) T
    WHERE charindex(ltrim(T.TCKEY)+' '+ltrim(T.TACONTENT),'TK')>0
      

  9.   

    SELECT * FROM (
    SELECT TAID,TAKEY,TACONTENT FROM @TA 
    UNION ALL
    SELECT TBID,TBKEY,TBCONTENT FROM @TB
    UNION ALL
    SELECT TCID,TCKEY,TCCONTENT FROM @TC
    ) T
    WHERE charindex('TK',ltrim(T.TAKEY)+' '+ltrim(T.TACONTENT))>0 支持
      

  10.   

    为什么
    WHERE charindex('TK',ltrim(T.TAKEY)+' '+ltrim(T.TACONTENT))>0TBKEY,TBCONTENT  怎么不考虑?
      

  11.   

    12楼写得非常详细了,运行一下就可以明白了
    union all所有的表,如果几个表的字段不一样,则默认以第一个表的字段为最后字段。
      

  12.   

    为什么在ACCESS里不能运行呢?ACCESS里的语句应该怎么写?
      

  13.   

    access的不会,
    会的兄弟帮帮写一下 :)
      

  14.   

    本示例使用 InStr 函数来查找某字符串在另一个字符串中首次出现的位置。 
    Dim SearchString, SearchChar, MyPos 
    SearchString ="XXpXXpXXPXXP" ' 被搜索的字符串。 
    SearchChar = "P" ' 要查找字符串 "P"。 
    ' 从第四个字符开始,以文本比较的方式找起。返回值为 6(小写 p)。 
    ' 小写 p 和大写 P 在文本比较下是一样的。 
    MyPos = Instr(4, SearchString, SearchChar, 1) 
    ' 从第4个字符开使,按照原文比较的方式找起。返回值为 9(大写 P)。 
    ' 小写 p 和大写 P 在二进制比较下是不一样的。 
    MyPos = Instr(1, SearchString, SearchChar, 0) 
    ' 缺省的比对方式为二进制比较(最后一个参数可省略)。 
    MyPos = Instr(SearchString, SearchChar) ' 返回 9。 
    MyPos = Instr(1, SearchString, "W") ' 返回 0。  
    SELECT * FROM ( 
    SELECT TAKEY,TACONTENT FROM TA表 
    UNION ALL 
    SELECT TBKEY,TBCONTENT FROM TB表 
    UNION ALL 
    SELECT TCKEY,TCCONTENT FROM TB表 
    ) T 
    WHERE Instr(1, T.TCKEY, "tk")>0 
    这样可以吗?怎么出现无效字符 ?
      

  15.   

    在access中,用你那样的写法应该是没问题的。我用我的数据测试没问题。我认为你的这条语句WHERE Instr(1, T.TCKEY, "tk")>0 中,字段名称写错了,应该写成instr(1,T.TAKEY,"tk")>0,应该是连接的表的第一个表的字段名,而不是最后一个字段名。连接后的表的字段名如果没指定的话,应该默认为第一个表的字段名。所以你的T.TCKEY为NULL,所以Instr(1, T.TCKEY, "tk")返回值为null,不能与0进行比较,会出现错误。看看instr()函数的联机帮助,instr()的返回值可能有null的情况。
    instr帮助如下:
    函数:InStr([start, ]string1, string2[, compare])
    返回值
    如果 InStr                 返回 
    string1 的长度为零           0 
    string1 为 Null            Null 
    string2 的长度为零           start 
    string2 为 Null            Null 
    找不到 string2             0 
    在 string1 中找到了 string2  找到匹配项的位置 
    start > string2            0 
      

  16.   

    在access中用通配符也能实现。在sql中因为效率问题,用like的较少。(不过access中是否有效率问题我就不太清楚了)SELECT * FROM ( 
    SELECT TAKEY,TACONTENT FROM TA表 
    UNION ALL 
    SELECT TBKEY,TBCONTENT FROM TB表 
    UNION ALL 
    SELECT TCKEY,TCCONTENT FROM TB表 
    ) T 
    WHERE T.TAKEY LIKE "*tk*"试一试,看是否可以。