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