Подтвердить что ты не робот

SQL Select Возвращаемое значение по умолчанию Если Null

База данных: MS SQL 2008

SELECT Listing.Title, Listing.MLS, Pictures.PictureTH, Pictures.Picture, Listing.ID 
FROM Listing INNER JOIN Pictures ON Listing.ID = Pictures.ListingID
WHERE (Pictures.ID = (SELECT MIN(ID) FROM Pictures WHERE (ListingID = Listing.ID)))

Проблема в том, что у меня есть несколько "списков" без картинки, и из-за этого SQL script они не отображаются. Как я могу заставить их появиться?

Может быть, дать Picture.Picture Column значение "default.jpg", если значение равно null? Я довольно потерял это, поэтому, если кто-то может помочь, это будет потрясающе. Извините, если я тоже задаю этот вопрос плохо, я не понимаю, как правильно спросить, что мне нужно. Но попросите более подробную информацию, и я отправлю их.

В каждом листинге может быть столько фотографий, сколько захочет пользователь, мне нужен этот script, чтобы отображать листинг, даже если у него нет изображения.


ФАЗА 2


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

SELECT Listing.Title, Listing.MLS, coalesce(Pictures.PictureTH, '../default_th.jpg') as PictureTH, coalesce(Pictures.Picture, '../default.jpg') as Picture, Listing.ID FROM Listing LEFT
OUTER JOIN Pictures ON Listing.ID = Pictures.ListingID

Как я могу получить его, чтобы он возвращал только 1 строку в листинг ID?

4b9b3361

Ответ 1

Две вещи:

  • Используйте left outer join вместо inner join, чтобы получить все списки, даже с отсутствующими изображениями.
  • Используйте coalesce для применения стандартного

    SELECT Listing.Title
        , Listing.MLS
        , Pictures.PictureTH
        , coalesce(Pictures.Picture, 'default.jpg') as Picture
        , Listing.ID  
    FROM Listing 
    LEFT OUTER JOIN Pictures 
        ON Listing.ID = Pictures.ListingID 
    

EDIT Чтобы ограничить одну строку:

SELECT Listing.Title
    , Listing.MLS
    , Pictures.PictureTH
    , coalesce(Pictures.Picture, 'default.jpg') as Picture
    , Listing.ID  
FROM Listing 
LEFT OUTER JOIN Pictures 
    ON Listing.ID = Pictures.ListingID 
WHERE Pictures.ID is null
OR Pictures.ID = (SELECT MIN(ID) 
    FROM Pictures 
    WHERE (ListingID = Listing.ID))) 

Ответ 2

если вы хотите установить значение по умолчанию, если Pic имеет значение null, вы можете сделать это с помощью ключевого слова COALESCE:

SELECT Listing.Title, Listing.MLS, Pictures.PictureTH, 
COALESCE (Pictures.Picture, 'default.jpg') AS Pictures, Listing.ID 
FROM Listing LEFT JOIN Pictures 
ON Listing.ID = Pictures.ListingID
WHERE (Pictures.ID = (SELECT MIN(ID) 
FROM Pictures WHERE (ListingID = Listing.ID)))

Вы также можете достичь этого через IsNull, как показано ниже:

SELECT Listing.Title, Listing.MLS, Pictures.PictureTH, 
ISNULL(Pictures.Picture, 'default.jpg') AS Pictures, Listing.ID 
FROM Listing LEFT JOIN Pictures 
ON Listing.ID = Pictures.ListingID
WHERE (Pictures.ID = (SELECT MIN(ID) 
FROM Pictures WHERE (ListingID = Listing.ID)))

вы можете прочитать здесь об IsNull и Coalesce

Ответ 3

Используйте left outer join вместо inner join

inner join будет возвращать результаты тогда и только тогда, когда есть результат, который удовлетворяет соединению.

left outer join вернет результаты из левой таблицы, и если соединение выполнено, также добавьте результаты из таблицы справа.

Если вам нужно преобразовать нулевые значения, возвращаемые из неудовлетворительных объединений, используйте функцию coalesce, например coalesce(Pictures.Picture, 'default.jpg')

Ответ 4

Нужно сделать LEFT join

SELECT Listing.Title, Listing.MLS, Pictures.PictureTH, Pictures.Picture, Listing.ID 
FROM Listing LEFT JOIN Pictures ON Listing.ID = Pictures.ListingID

Ответ 5

Landmine, какую базу данных вы используете?

Если это sql server 2005 или выше или oracle, вы можете использовать команду pivot для достижения этого.