mysql объединяет 2 таблицы - показывает все строки из одной таблицы - PullRequest
3 голосов
/ 18 мая 2011

У меня есть две таблицы, например, так: таблица "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

Теперь мне нужнообъединить эти две таблицы, чтобы каждый продукт взял полное название своего запаса из таблицы «а», и если его количество не указано для запаса, оно все равно будет отображать строку с количеством как 0.

из моего примера product_id 13 будет отображаться как:

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

Ответы [ 6 ]

4 голосов
/ 18 мая 2011

Вы должны быть в состоянии использовать левое соединение для достижения этого.

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 голосов
/ 28 марта 2013

Вы должны быть в состоянии использовать 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
0 голосов
/ 18 мая 2011

Вам необходимо внешнее соединение, чтобы строки из таблицы без соответствующей строки в b все еще рассматривались. Внутреннее соединение, напротив, требует наличия подходящей строки. Если вы извлекаете значение из таблицы, в которой у вас нет строки, вы получаете NULL. Синтаксис варьируется между БД, и существует различие в зависимости от того, является ли таблица слева или справа фальшивыми строками.

см. Другие ответы по синтаксису.

0 голосов
/ 18 мая 2011

Я думаю, что этот запрос должен работать для вашего примера:

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;
0 голосов
/ 18 мая 2011

Звучит так, как будто вам нужно использовать LEFT JOIN , хотя записи без количества могут отображаться как NULL, а не нольЧто-то вроде:

SELECT a.*, b.* 
FROM table_a a
    LEFT JOIN table_b b ON a.stock_id = b.stock_id
0 голосов
/ 18 мая 2011

попробуйте это:

SELECT stock,COALESCE(quanitity,0),product_id,stock_fullname FROM stock JOIN product 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...