[英]mysql left join - returning rows using NULL and a condition
我有兩個表:“ shift”和“ event”。 一班倒有很多事件。
一些樣本數據:
---- shift ----
id - location
1 - mcdonalds
2 - burger king
3 - subway
--- event ---
id - shift_id - type - note
1 - 1 - 2 - bingo
2 - 1 - 3 - bingo
3 - 2 - 4 - ignore
4 - 2 - 2 - ignore
事件具有類型,例如:類型'4'代表開始換檔的事件。
我想構建一個查詢,該查詢返回類型= 4的沒有事件記錄的所有班次。因此,在上面的示例中,我將帶回mcdonalds。
我到目前為止:
SELECT
shift.location AS location,
FROM shift
LEFT JOIN event ON event.shift_id=shift.id
那就是我被困住的地方。 顯然可以添加
WHERE event.type IS NULL
..但是如何只返回類型為4的null為空的行?
謝謝....!
如果您使用LEFT JOIN
,則可以丟棄類型= 4的行,但是如果您的班次有兩個事件,則一個等於4,而另一個不等於...,您將得到該班次,因為存在的行相差4。您使用NOT EXISTS
對子查詢的所有行進行analysys。
嘗試這個:
SELECT *
FROM shift s
WHERE NOT EXISTS(
SELECT 'EVENT'
FROM event e
WHERE e.shift_id = s.id
AND e.type = '4'
)
以下查詢選擇事件表中所有類型為4的班次。 然后,在此數據和移位表之間進行左聯接。 選擇具有event.shift_id的行(這意味着沒有類型= 4的shift_id)。
SELECT
shift.*
FROM shift
LEFT JOIN (SELECT DISTINCT shift_id FROM event WHERE type = 4) event ON event.shift_id=shift.id
WHERE event.shift_id IS NULL;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.