【问题标题】:Need a MYSQL query to compare two tables and only output non matching results需要一个MYSQL查询比较两个表,只输出不匹配的结果
【发布时间】:2010-04-16 15:11:54
【问题描述】:

我的数据库中有两个表,一个包含项目列表以及这些项目的其他信息。另一个表包含这些项目的照片列表。

items 表给每个item 一个唯一的标识符,它在photos 表中用来标识被拍照的item。

我需要在第二个表中输出未链接到照片的项目列表。关于如何做到这一点的任何想法?

【问题讨论】:

标签: mysql database-design compare resultset


【解决方案1】:
select i.*
from Items i
left outer join Photographs p on i.ID = p.ItemID
where p.ItemID is null

【讨论】:

  • 只回答使用连接而不是内部选择语句!!请选择这个答案,因为连接比内部选择更容易阅读、更好的 sql 和更好的预制
  • Orbman,感谢您的快速响应,我已经为我的任务调整了代码,它工作正常。我必须阅读 JOINS,我对编写自己的查询很陌生,但它们似乎确实让它变得更容易了。再次感谢:)
  • @ee12csvt:所以您需要将正确答案授予 RedFilter。这就是阅读您问题的人知道正确答案的方式。
  • 此查询是否会将值与每一列和每一行进行比较?还是只给我那些 ID 不匹配的?
  • @Naveen 加入严格按照各自的 ID。
【解决方案2】:
SELECT * FROM items WHERE id NOT IN (SELECT item_id FROM photos);

应该是你想要的

【讨论】:

  • 如果我有这么大量的数据怎么办?
【解决方案3】:

如果一件物品有不止一张照片,则使用 distinct。

SELECT * FROM items WHERE id NOT IN (SELECT distinct(item_id) FROM photos);

【讨论】:

    【解决方案4】:
    SELECT id,name from tbl_item 
    WHERE id NOT IN (SELECT distinct(tbl_item.id) FROM tbl_item INNER JOIN tbl_photo ON tbl_photo.pid=tbl_item.id)
    

    【讨论】:

    • 这需要'id'上的索引吗?
    • 嗯,不是强迫症,但是你将如何连接两个表。索引将使事情变得更简单。虽然您可能面临一个独特的问题,我只能在知道后才能帮助您
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 2017-03-01
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多