mysql join 2 tables - 显示一个表中的所有行

时间:2011-05-18 13:55:01

标签: mysql phpmyadmin

我有两张桌子,如下: 表“a”包含:

id|name

stock1|fullname
stock2|fullname2
stock3|fullname3

表“b”包含给定库存的产品数量。

id|stock_id|quantity|product_id|
1|stock1|3|13
2|stock3|4|13
3|stock1|1|5
4|stock2|2|2

现在我需要将这两个表组合在一起,以便每个产品从表“a”中获取其库存全名,如果没有给出库存的数量,它仍然会显示quanitity为0的行。

因此,从我的示例中,product_id 13将显示为:

stock|quanitity|product_id|stock_fullname
stock1|3|13|fullname1
stock2|0|13|fullname2
stock3|4|13|fullname3

6 个答案:

答案 0 :(得分:4)

您应该可以使用LEFT JOIN来实现此目的。

SELECT a.id AS stock, COALESCE(b.quanitity,0), b.product_id, a.name AS stock_fullname
FROM a
LEFT JOIN b
  ON a.id = b.stock_id
  AND b.product_id = 13

答案 1 :(得分:0)

试试这个:

SELECT stock,COALESCE(quanitity,0),product_id,stock_fullname FROM stock JOIN product 

答案 2 :(得分:0)

听起来你需要使用LEFT JOIN,尽管没有数量的记录可能显示为NULL而不是零。类似的东西:

SELECT a.*, b.* 
FROM table_a a
    LEFT JOIN table_b b ON a.stock_id = b.stock_id

答案 3 :(得分:0)

我认为此查询适用于您的示例:

SELECT a.id stock if(b.quantity IS NULL, 0, b.quantity), 
       b.product_id, a.name stock_fullname
FROM b
LEFT JOIN a b.stock = a.id
WHERE b.product_id = 13;

答案 4 :(得分:0)

您需要一个外部联接,以便仍然考虑来自一个表中没有相应行的行。相反,内连接坚持你有一个匹配的行。如果要从没有行的表中提取值,则会得到NULL。语法在不同的数据库之间有所不同,并且根据左侧或右侧的表是否得到假行进行区分。

请参阅语法的其他答案。

答案 5 :(得分:0)

您应该可以使用LEFT JOIN来实现此目标。

SELECT a.id AS stock, COALESCE(b.quanitity,0), b.product_id, a.name AS stock_fullname
FROM a
LEFT JOIN b
  ON a.id = b.stock_id
  AND b.product_id = 13