0

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

4 回答 4

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

为了获得更快的性能,您必须在两个表上定义一个INDEXon 列item_id以防止服务器执行FULL TABLE SCAN.

要全面了解联接,请访问以下链接:

于 2013-01-29T14:17:34.937 回答
0

试试这个查询...

SELECT A.*
FROM   TableA A FULL OUTER JOIN TableB
       ON A.Item_id = B.Item_ID
WHERE  B.Item_ID IS NULL
于 2013-01-29T14:46:42.120 回答
0
SELECT *
FROM TableA
WHERE item_id NOT IN(SELECT item_id  FROM tableb);

演示

于 2013-01-29T14:17:30.287 回答
0

尝试这个::

Select 
A.*
from
A LEFT JOIN B on (A.item_id=B.item_id)
where B.item_id is null
于 2013-01-29T14:17:51.537 回答