用于连接后连接表的SQL

问题描述 投票:0回答:2

我有两张桌子,表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
mysql ms-access
2个回答
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

0
投票

如果你在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
© www.soinside.com 2019 - 2024. All rights reserved.