我有两张桌子,表A和表B.
Col1
----------
one.1.1
two.2.2
three.2.2
one.1
one.3
| 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
这个MySQL查询(SQLFiddle)会做你想要的。请注意,在MySQL中,您使用CONCAT
或CONCAT_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
如果你在where where condition中使用左连接表列作为内连接..将条件保留在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