[英]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.