MySQL select 涉及连接的语句
MySQL select statement involving join
我有两个table,a和b
table一个
--------------------
|id | item |
--------------------
|1 | apple |
--------------------
|2 | orange |
--------------------
|3 | mango |
--------------------
|4 | grapes |
--------------------
|5 | plum |
--------------------
|6 | papaya |
--------------------
|7 | banana |
--------------------
tableb
----------------------------
user_id | item_id | price |
----------------------------
32 | 3 | 250 |
----------------------------
32 | 6 | 180 |
----------------------------
32 | 2 | 120 |
----------------------------
现在我想加入 MySql 中的两个 table,这样我就可以得到 table 中所有水果的列表以及它们在 table 中的价格b 用户 32;像这样:
-----------------------------
|id | item | price |
-----------------------------
|1 | apple | |
-----------------------------
|2 | orange | 120 |
------------------------------
|3 | mango | 250 |
------------------------------
|4 | grapes | |
------------------------------
|5 | plum | |
------------------------------
|6 | papaya | 180 |
------------------------------
|7 | banana | |
------------------------------
我能做的最好的就是:
SELECT a.id,
a.item,
b.price
FROM a
INNER JOIN b ON a.id = b.item_id
WHERE b.user_id = 32
这只给我已设置价格的行,而不是未设置价格的行。我如何构建 SQL?
您必须改用 OUTER JOIN
SELECT a.id, a.item, b.price
FROM a LEFT OUTER JOIN b ON a.id = b.item_id WHERE b.user_id = 32
使用LEFT OUTER JOIN代替INNER JOIN
试试这个:
SELECT a.id, a.item, b.price
FROM a
LEFT OUTER JOIN b ON a.id = b.item_id AND b.user_id = 32;
您需要一个 "LEFT" 联接来确保返回左侧的所有记录,而不管右侧的对应值如何。
SELECT a.id, a.item, b.price
FROM a
LEFT JOIN b ON a.id = b.item_id
WHERE b.user_id = 32
我有两个table,a和b
table一个
--------------------
|id | item |
--------------------
|1 | apple |
--------------------
|2 | orange |
--------------------
|3 | mango |
--------------------
|4 | grapes |
--------------------
|5 | plum |
--------------------
|6 | papaya |
--------------------
|7 | banana |
--------------------
tableb
----------------------------
user_id | item_id | price |
----------------------------
32 | 3 | 250 |
----------------------------
32 | 6 | 180 |
----------------------------
32 | 2 | 120 |
----------------------------
现在我想加入 MySql 中的两个 table,这样我就可以得到 table 中所有水果的列表以及它们在 table 中的价格b 用户 32;像这样:
-----------------------------
|id | item | price |
-----------------------------
|1 | apple | |
-----------------------------
|2 | orange | 120 |
------------------------------
|3 | mango | 250 |
------------------------------
|4 | grapes | |
------------------------------
|5 | plum | |
------------------------------
|6 | papaya | 180 |
------------------------------
|7 | banana | |
------------------------------
我能做的最好的就是:
SELECT a.id,
a.item,
b.price
FROM a
INNER JOIN b ON a.id = b.item_id
WHERE b.user_id = 32
这只给我已设置价格的行,而不是未设置价格的行。我如何构建 SQL?
您必须改用 OUTER JOIN
SELECT a.id, a.item, b.price
FROM a LEFT OUTER JOIN b ON a.id = b.item_id WHERE b.user_id = 32
使用LEFT OUTER JOIN代替INNER JOIN
试试这个:
SELECT a.id, a.item, b.price
FROM a
LEFT OUTER JOIN b ON a.id = b.item_id AND b.user_id = 32;
您需要一个 "LEFT" 联接来确保返回左侧的所有记录,而不管右侧的对应值如何。
SELECT a.id, a.item, b.price
FROM a
LEFT JOIN b ON a.id = b.item_id
WHERE b.user_id = 32