簡體   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