簡體   English   中英

mysql左連接-使用NULL和條件返回行

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

SQL Fiddle演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM