[英]MySQL: SELECT field from table1 not present in table2
简化后的数据库如下所示:
CREATE
TABLE vinyls (
id_vinyl INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id_vinyl),
UNIQUE KEY id_vinyl (id_vinyl));
CREATE
TABLE orders (
id_order INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (id_order),
UNIQUE KEY id_order (id_order));
CREATE
TABLE orders_vinyls (
id_order INT(10) UNSIGNED NOT NULL,
id_vinyl INT(11) UNSIGNED NOT NULL,
PRIMARY KEY (id_order, id_vinyl),
UNIQUE KEY id_vinyl (id_vinyl),
FOREIGN KEY (id_order) REFERENCES orders (id_order) ON DELETE CASCADE,
FOREIGN KEY (id_vinyl) REFERENCES vinyls (id_vinyl) ON DELETE CASCADE);
它被设计为具有一个包含多个乙烯基的订单-表orders_vinyls。 我需要为客户提供乙烯基。 这些是id_vinyl不在表orders_vinyls中的那些。 并且orders_vinyls为空时可能会给我带来一些麻烦。
谢谢您的帮助。
更新:例如表乙烯基:(1),(2),(3),(4),(5),(6);
表格顺序:(1),(2),(3)
表格orders_vinyls:(1、1),(1、2),(2、3),(3、4)
因此,我需要获取id_vinyl为5或6的乙烯基,因为它们不在表orders_vinyls中。
如果您要选择的顺序不存在的乙烯基,那么一种选择是使用NOT EXISTS
:
SELECT v.*
FROM vinyls AS v
WHERE NOT EXISTS (SELECT 1
FROM orders_vinuls AS ov
WHERE ov.id_vinyl = v.id_vinyl)
如果表orders_vinuls
为空,这也将起作用。
如果我正确理解了您的问题,则可以使用设置差异运算, except
select id_vinyl from vinyls
except
select id_vinyl from orders_vinyls
如果您实际的乙烯基表比较复杂,则可以使用上面的查询结果与原始表结合,也可以使用其他查询
select *
from vinyls
where id_vinyl not in (
select id_vinyl from orders_vinyls
)
您可以使用NOT EXISTS
Select * from table1 a
Where not exists (select 1 from table2 b where b.vynil_id = a.vynil_id)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.