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