簡體   English   中英

Sql左側使用filter連接兩列

[英]Sql left join across two columns with filter

更新:這已解決,我正在進行語法錯誤。


我可以加入並過濾左連接中的兩列嗎? 例如:

tbl_people
id    food     side     value
a     pizza    fries    10
b     pizza    shake     2
c     burger   fries    3

tbl_sides
food     side
pizza    fries
burger   fries

然后使用SQL:

SELECT 
  id, food, side, value
FROM
  tbl_people AS people
LEFT JOIN
  tbl_sides AS sides ON sides.food = people.food
  AND sides.side = people.side

我可以添加一個標志,以便我可以確定食物對是否已連接或是否為空? 我不想內心加入,因為我需要計算每人的食物/食物總量,以及每人的食物/配對數量。 我試過了:

SELECT 
  id, food, side, value,
  CASE WHEN
    side.side IS NOT NULL
    AND side.food IS NOT NULL
    THEN 1
    ELSE 0
  END AS match_flag
FROM
  tbl_people AS people
LEFT JOIN
  tbl_sides AS sides ON sides.food = people.food
  AND sides.side = people.side

但它不起作用。 基本上我只需要標記何時不應用連接但我遇到了麻煩。

我想你想要的是這個:

SELECT 
  id, food, side, value,
  CASE WHEN
    side.side = people.side 
    THEN 1
    ELSE 0
  END AS match_flag
FROM
  tbl_people AS people
LEFT JOIN
  tbl_sides AS sides ON people.food = sides.food

對於MySQL,表達式將返回布爾值true / false 1/0,在查找布爾輸出時用作簡寫CASE語句。

這將標記與1不匹配:

SELECT 
  people.id, people.food, people.side, people.value
  ,sides.food IS NULL AS match_flag
FROM
  tbl_people AS people
LEFT JOIN tbl_sides AS sides 
  ON sides.food = people.food
  AND sides.side = people.side

演示: SQL小提琴

或者這將非匹配標記為0:

SELECT 
  people.id, people.food, people.side, people.value
  ,COALESCE(sides.food = people.food,0) AS match_flag
FROM
  tbl_people AS people
LEFT JOIN tbl_sides AS sides 
  ON sides.food = people.food
  AND sides.side = people.side

演示: SQL小提琴

嘗試在join之前標記null值

SELECT 
  people.id, people.food, people.side, people.value, nvl(sides.side, 'NOT JOINED')
FROM
  tbl_people AS people
LEFT JOIN
  (select food, nvl(side, 'SOME NULL') as side from tbl_sides) AS sides 
 ON sides.food = people.food
AND sides.side = people.side

當表達式為NULL時返回1,否則返回0。

http://sqlfiddle.com/#!2/cadbdd/15/0

SELECT *, ISNULL(sides.food) AS match_flag
FROM
  tbl_people AS people
LEFT JOIN
  tbl_sides AS sides ON sides.food = people.food
  AND sides.side = people.side

暫無
暫無

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

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