繁体   English   中英

在MySQL 5.7中,我如何选择所有少于2个相关子表行的父表行

[英]In MySQL 5.7 how would I select all parent table rows with less than 2 related child table rows

同样,这是一个MySQL 5.7 DB。 例如,假设我有一个汽车数据库,一个汽车表和一个价格更新表。 (这是一个人为的示例)。

Database: CarLot
Table: Cars
-Id
-Year
-Make
-Model

Table: PriceUpdates
-Id
-CarId (FK Cars:Id)
-Price
-DateChanged

伪代码我想做的事情看起来像:

在汽车有<2个PriceUpdate行的情况下从汽车中选择*(对于每个给定的CarId,少于2个关联的PriceUpdate行)

我在SQL方面不是很强,也不确定在简单的查询中是否可行,或者是否必须进入过程或T-SQL之类。

带有断言的联接查询应该在这里工作:

SELECT c.*
FROM Cars c
LEFT JOIN PriceUpdates pu
    ON c.Id = pu.CarId
GROUP BY
    c.Id
HAVING
    COUNT(pu.CarId) < 2;

注意:在MySQL(和ANSI SQL)中,按Cars.Id并从该表中选择所有其他列是完全有效的,因为这些列在功能上取决于Id列。

如果您还想要价格(尽管您使用了伪代码,这似乎也是可能的),那么通常会使用exists

SELECT c.*, pu.*
FROM Cars c LEFT JOIN
     PriceUpdates pu
     ON c.Id = pu.CarId
WHERE NOT EXISTS (SELECT 1
                  FROM PriceUpdates pu2
                  WHERE pu2.CarId = pu.CarId AND
                        pu2.Id <> pu.Id
                 );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM