查询表中的行并豁免特定行(如果它们存在于另一个中)

时间:2013-01-29 14:16:06

标签: php mysql sql select

我有两个不同的表,两个表中都有类似的列。我需要查询表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
---------------------------------

很高兴能得到这方面的帮助......谢谢!

4 个答案:

答案 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);

Demo

答案 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