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