简化我的数据库如下所示:
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的订单。我需要得到乙烯基,这是可供客户。这些是不在表orders_vinyls中的id_vinyl。可能会出现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中。
发布于 2017-05-31 15:43:53
如果您想要的是选择那些没有按任何顺序出现的乙烯基,那么一种选择是使用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为空的情况。
发布于 2017-05-31 15:41:06
如果我对您的问题理解正确的话,您可以使用设置差异操作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
)发布于 2017-05-31 15:44:35
您可以使用NOT EXISTS
Select * from table1 a
Where not exists (select 1 from table2 b where b.vynil_id = a.vynil_id)https://stackoverflow.com/questions/44278503
复制相似问题