MySQL выбрать из той или иной таблицы - PullRequest
2 голосов
/ 20 августа 2010

Спасибо, за вашу помощь, я опубликовал упрощенную версию своей проблемы, но я действительно не понимал, как применить левое соединение к большому, а именно:

SELECT d.type, 
       d.item , 
       if(d.type='I', a.name, b.name) as name, 
       if(d.type='I', c.price,0) as price, 
       if(d.type='I',if(d.taxes='yes', 
       (c.priceWithTax*d.weight), (c.price*d.weight)),0) as totalprice 
  FROM d 
inner join a on d.item=a.id 
inner join c on d.item=c.item
     where c.sede =1

Проблема в том, что когда d.type = 'I', мне нужны элементы из таблицы a, но если d.type = 'S', мне нужны элементы из таблицы B, цены указаны в таблице c.

Большое спасибо.

Ответы [ 3 ]

0 голосов
/ 20 августа 2010
select
  a.col1,
  b.col1,
  coalesce(c.col1,0)
from a inner join b on a.col0=b.col1
  left outer join c on b.col2='apple' and c.col1=b.col0

Что нужно изучить:


У меня есть таблица rawFood, таблица cookedFood и таблица Menu, а таблица меню содержит элементы обоих типов:rawFood и cookedFood, поэтому мне нужно присоединиться таким образом

Вам нужно иметь один food стол и дать ему столбец, который отмечает разницу между сырой и приготовленной пищей.

0 голосов
/ 20 августа 2010

Вы можете использовать левое соединение

select
    a.col1,
    b.col1,
    ifnull(c.col1,0)
from a 
    inner join b on a.col0=b.col1
    left join c on (c.col1 = b.col0 and b.col2="apple")
where
    b.col2 != "apple" or (b.col2 = "apple" and c.col1 is not null)
0 голосов
/ 20 августа 2010

Если вам нужно что-то подобное, это ясно указывает на неправильную структуру вашей базы данных.
Это должна быть одна таблица, и ваш запрос станет простым и легким.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...