繁体   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