2013-12-06 4 views
3

В принципе, у меня есть две таблицы: управление и картинки. Мне нужен список со всеми свойствами из таблицы управления. Если изображения существуют, список должен показывать только первое изображение (seq = 1).SQL выбрать из двух таблиц с ограничениями

Моя проблема: список не отображает свойства без изображений. Как я могу это решить?

У меня есть следующие таблицы:

tblMan

propid | city | lang | ... 
    1  Mol  NL   
    2  Olen NL   
    3  Geel NL  
    4  Ham  FR  

tblPic

propid | lang | seq | filename 
    1  NL  1  file11 
    1  FR  1  file12 
    1  NL  2  file13 
    1  FR  2  file14 
    1  NL  3  file15 
    1  FR  3  file16 
    3  NL  22  file17 
    3  FR  22  file18 
    3  NL  23  file19 
    3  FR  23  file20 
    3  NL  24  file21 
    3  FR  24  file22 

SELECT m.propid, m.city, p.filename 
FROM tblMan as m 
INNER JOIN tblProp as p ON m.propid = p.propid 
WHERE m.lang = 'NL' AND p.lang = 'NL' AND p.picture_index = '1' 

Результат является:

propid | city | filename 
    1  Mol  file11 
    3  Geel file17 

Он не получает propid 2 (Олен), потому что есть нет изображения!

Я хочу, чтобы результат:

propid | city | filename 
    1  Mol  file11 
    2  Olen (Null or 0 or...) 
    3  Geel file17 

Я попытался подзапрос, союз, CONCAT ... (@ _ @) без результата.

У кого-нибудь есть идеал, какой оператор SQL я должен использовать?

Спасибо за помощь!

ответ

2

использование LEFT JOIN, так как вы хотите, чтобы отобразить все записи в таблице tblMan, который соответствует свое состояние на п WHERE и двигаться некоторое условие фильтрации для таблицы tblProp на пункте ON

SELECT m.propid, 
     m.city, 
     p.filename 
FROM tblMan as m 
     LEFT JOIN tblProp as p 
      ON m.propid = p.propid 
       AND p.lang = 'NL' 
       AND p.picture_index = '1' 
WHERE m.lang = 'NL' 
+0

Это отлично работает. Моя следующая проблема: есть фотографии, где последовательность (picture_index) начинается с 22 или 32 ... вместо 1. Когда я использую min(), я получаю «Недопустимое использование групповой функции». Благодаря! – swebd

+0

можете ли вы обновить эту демонстрацию с помощью индекса изображения, чтобы я мог обновить ответ? http://sqlfiddle.com/#!2/00c82/2 –

1

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

SELECT m.propid, 
     m.city, 
     p.filename 
FROM tblman AS m 
     LEFT JOIN tblprop AS p 
       ON m.propid = p.propid 
       AND p.lang = 'NL' 
       AND p.picture_index = '1' 
WHERE m.lang = 'NL' 
0

Вам необходимо использовать LEFT OUTER JOIN вместо INNER JOIN.

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