我有两个不同的表,两个表中都有类似的列。我需要查询表A中的所有行,但如果表B中存在这些行,则必须免除表A中的特定行。
示例:
Table A
---------------------------------
item_id | item_name | price
---------------------------------
1 | apple | 100
---------------------------------
2 | banana | 150
---------------------------------
3 | ginger | 120
---------------------------------
4 | pear | 150
---------------------------------
5 | berry | 120
---------------------------------
Table B
---------------------------------
item_id | item_owner |
---------------------------------
1 | Ben |
---------------------------------
2 | Damian |
---------------------------------
3 | Greg |
---------------------------------
根据上面的例子,如果表B中不存在item_id,我需要运行一个查询来获取表A中的所有行。
此查询的结果应仅提取2行:
---------------------------------
4 | pear | 150
---------------------------------
5 | berry | 120
---------------------------------
很高兴能得到这方面的帮助......谢谢!
答案 0 :(得分:1)
使用LEFT JOIN
SELECT a.*
FROM tableA a
LEFT JOIN tableB b
ON a.item_id = b.item_id
WHERE b.item_id IS NULL
为了提高性能,您必须在两个表的INDEX
列上定义item_id
,以防止服务器执行FULL TABLE SCAN
。
要充分了解联接知识,请访问以下链接:
答案 1 :(得分:0)
SELECT *
FROM TableA
WHERE item_id NOT IN(SELECT item_id FROM tableb);
答案 2 :(得分:0)
试试这个::
Select
A.*
from
A LEFT JOIN B on (A.item_id=B.item_id)
where B.item_id is null
答案 3 :(得分:0)
尝试此查询...
SELECT A.*
FROM TableA A FULL OUTER JOIN TableB
ON A.Item_id = B.Item_ID
WHERE B.Item_ID IS NULL