2014-09-26 5 views
0

У меня есть 4 таблицы, как показано нижеВыборка данных из 4-х таблиц MySQL

Table1: restos Структура:

resu_id resu_name  resu_address 
------------------------------------- 
    1  ABC    Exapmple 
    2  DEF    Example 
    3  GHD    Example 

table2: foodtype Структура:

id typename 
--------------- 
12 Indian 
23 Punjabi 

Table3: resto_foodtypes Структура :

resu_id foodty_id 
-------------------- 
    1   12 
    2   23 
    3   12 

Таблица 4: discnts Состав:

id resu_id amt_dscPer(%age discount) 
--------------------------- 
19  1   15 
20  2   25 

Теперь я хочу, чтобы отобразить ресторан вместе со скидками, доступных для restauarant. В настоящее время рестораны отображаются, но для ресторана, не присутствующего в таблице discnts, возвращаются нулевые значения от discnts стол.

ниже запрос, который использует

SELECT * from `restos` r join resto_foodtypes rf on rf.resu_id = r.resu_id 
join foodtype f on rf.foodty_id = f.id left join discnts dcfm on 
r.resu_id= dcfm.resu_id where true; 

Я хочу, что рестораны, которые не присутствует в таблице discnts не должны быть включены в результирующем. Напр. resu_id=3 нет в discnts таблица.

+0

@Jens. я ошибся здесь .. теперь исправлено –

+0

'where true'? Что ты хочешь ? – Raptor

+0

попробуйте левое соединение вместо соединения –

ответ

0

Для исключения результатов, которые не имеют записи в таблице discnts, используйте INNER JOIN вместо LEFT JOIN.

Чтобы включить эти результаты, но имеет 0 отображаются (вместо значения по умолчанию NULL), вы можете использовать IFNULL(expr, 0) функции:

SELECT 
    r.resu_name AS Name, 
    f.typename AS Food, 
    IFNULL(dcfm.amt_dscPer, 0) AS Discount 
FROM `restos` r 
JOIN resto_foodtypes rf ON rf.resu_id = r.resu_id 
JOIN foodtype f ON rf.foodty_id = f.id 
LEFT JOIN discnts dcfm ON r.resu_id= dcfm.resu_id; 

IFNULL возвращает первый параметр, если он не является нулевым, то второй, если expr действительно является нулевым.

+0

Я не хочу, чтобы результаты были исключены. Все рестораны должны отображаться, но скидки отображаются как 0 –

+0

Хорошо, я неправильно понял вопрос, см. Обновленный ответ для нового решения. – Paul

Смежные вопросы