用于连接后连接表的SQL

时间:2018-05-02 12:12:31

标签: mysql ms-access

我有两个表,表A和表B.

表A

Col1
----------
one.1.1
two.2.2
three.2.2
one.1
one.3

表B

| Col1   | Col2 | Col3 |
+----------------------+
| one    | 1    | 1    |
| two    | 2    | 2    |
| three  | 2    | 1    |
| three  | 2    | 2    |

我想要一个左连接,它显示表A中但不在表B中的值。 我需要连接表B列,它们可以是格式“Col1.Col2”或“Col1.Col2.Col3”

这是我的疑问:

SELECT Col1
FROM TableA AS A 
    LEFT JOIN TableB AS B ON A.Col1 = B.Col1+'.'+B.Col2+'.'+B.Col3
WHERE A.Col1 IS NOT NULL
     AND B.Col1+'.'+B.Col2+'.'+B.Col3 IS NULL

2 个答案:

答案 0 :(得分:0)

如果你使用左连接表的列在哪里条件这作为一个内连接..保持条件在on子句

在您的情况下,您需要不匹配的行只使用它们

SELECT Col1 FROM TableA AS A 
LEFT JOIN TableB as B ON A.Col1 = B.Col1+'.'+B.Col2+'.'+B.Col3   
WHERE B.Col1+'.'+B.Col2+'.'+B.Col3 IS NULL

答案 1 :(得分:0)

此MySQL查询(SQLFiddle)将执行您想要的操作。请注意,在MySQL中,您使用CONCATCONCAT_WS来加入字符串。另请注意,您只需要检查B.col1是否为NULL

SELECT A.Col1
FROM TableA A
LEFT JOIN TableB B
ON A.Col1 = CONCAT_WS('.', B.Col1, B.Col2, B.Col3) OR
   A.Col1 = CONCAT_WS('.', B.Col1, B.Col2)
WHERE B.Col1 IS NULL

输出:

Col1
one.3