Предложение WHERE только IF NOT NULL

Мне нужна помощь с моим SELECT.

Я получил поле, которое может быть NULL, и в нем хранится внешний ключ.

SELECT * FROM beerImage WHERE beerBRewID = brewID AND beerBrandID = beerID <--- this can be NULL

Итак, если он NULL ничего не происходит.

Как проверить, есть ли beerID NOT NULL, поэтому я могу использовать "beerBrandID = beerID"?

Ответ 1

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

SELECT beer.id AS beerID,
 beer.barrelID AS barrelID,
 beer.imageID AS imageID,
 beer.title AS title,
 beer.map AS map,
 beer.longitude AS longitude, 
 beer.latitude AS latitude, 
 brand.name AS brandName, 
 brew.type AS brewType,
 image.name AS imageName, 
 variation.name AS variationName 
FROM brand, brew, image, beer
LEFT OUTER JOIN variation ON variation.ID = beer.VariationID
WHERE beer.id = %s 
AND md5(beer.memberID) = %s 
AND beer.review = 1 
AND brand.ID = beer.brandID 
AND brew.ID = beer.brewID 
AND image.ID = beer.imageID 

Ответ 2

Вам, вероятно, понадобится что-то вроде этого:

Первый пример:

SELECT * FROM beerImage WHERE beerBRewID = brewID AND (beerID IS NULL OR beerBrandID = beerID)

Второй пример:

SELECT * FROM beerImage WHERE beerBRewID = brewID AND beerID IS NOT NULL AND beerBrandID = beerID

Первый пример позволит вам показывать записи, в которых есть идентификатор пива id вместе с пивом, пивоBrandID равно пиридическому (оба).

Второй возвращает точно пиво, которое соответствует пивуBrandID (исключая пилюли NULL).

Ответ 3

Чтобы проверить значение null/not null, используйте IS NULL/IS NOT NULL

AND beerID IS NOT NULL

Ответ 4

Вы можете использовать функции сравнения "IS NULL" или "IS NOT NULL" MySQL.

Подробнее об этом читайте здесь: http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_is-null

Ответ 5

Как насчет использования с оператором CASE в where where clause

WHERE
CASE WHEN  beer.id IS NOT NULL 
    THEN beer.brand_id = 12345
    ELSE TRUE
END