簡體   English   中英

MySQL:table2中的table1中的SELECT字段不存在

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM