开发者

mysql join 2 tables - show all rows from one table

开发者 https://www.devze.com 2023-03-07 05:08 出处:网络
I have two tables, like so: table \"a\" contains: id|name stock1|fullname stock2|fullname2 stock3|fullname3

I have two tables, like so: table "a" contains:

id|name

stock1|fullname
stock2|fullname2
stock3|fullname3

table "b" contains product quantities for 开发者_如何学运维given stock.

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

Now I would need to combine those two tables, so that each product takes its stock full name from table "a", and if its quanitity is not given for stock, it would still show the row with the quanitity as 0.

So from my example, product_id 13 would show as:

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


You should be able to use a LEFT JOIN to achieve this.

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


It sounds like you need to use a LEFT JOIN, although the records with no quantity might show as NULL rather than zero. Something like:

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


try this:

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


You need an outer join so that rows from the a table without a corresponding row in b are still considered. An inner join, by contrast, insists that you have a matching row. If you are pulling a value from the table where you don't have a row, you get NULL. Syntax varies between DBs and there is a distinction made depending on if it's the table on the left or right that gets the fake rows.

see other answers for syntax.


I think this query should work for your example:

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;


You should be able to use a LEFT JOIN to achieve this.

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
0

精彩评论

暂无评论...
验证码 换一张
取 消