2012-08-15 35 views
7

Tôi cần trợ giúp với số SELECT của mình.WHERE Khoản chỉ IF NOT NULL

Tôi có một trường có thể là NULL và trong đó có một khóa ngoại.

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

Vì vậy nếu đó là NULL thì không có gì xảy ra.

Làm cách nào để kiểm tra xem beerIDNOT NULL để tôi có thể sử dụng "beerBrandID = beerID"?

+7

+1 vì bạn có bảng có tên beerImage – goat

+0

Bạn có thể làm rõ vấn đề của mình một chút không? Cách tôi nhìn thấy nó, trong bảng 'beerImage' có một trường' beerId' được sử dụng như một khóa ngoại, nhưng là nullable, đúng không? Bạn có cần thu thập dữ liệu từ hai bảng cùng một lúc không? – raina77ow

+0

Đặt thành +2 cho tên bảng beerImage, bạn có phiếu bầu của tôi. – Michael

Trả lời

2

Nếu bạn muốn bao gồm hồ sơ nơi không có kết quả phù hợp, bạn cần tham gia bên ngoài

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 
+0

điều này gây ra Cột không xác định 'beer.VariationID' trong 'on khoản' – user1600867

+0

thử di chuyển bia đến cuối của từ – FJT

+0

Đây là nó, THANKS một LOT !!!! – user1600867

0

Để kiểm tra null/không null, sử dụng IS NULL/IS NOT NULL

AND beerID IS NOT NULL 
+0

WHERE beerBRewID = brewID VÀ beerBrandID = beerID AND beerID NOT NULL như thế này? – user1600867

7

Bạn có lẽ cần một cái gì đó như thế này:

Đầu dụ:

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

Thứ hai Ví dụ:

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

Ví dụ đầu tiên sẽ cho phép bạn hiển thị các bản ghi có biaID null cùng với các loại bia mà beerBrandID bằng beerID (cả hai).

Loại thứ hai sẽ trả lại chính xác các loại bia tương ứng với beerBrandID (ngoại trừ biaID NULL).

+0

Nếu biaBrandId = beerId, beerId chắc chắn không phải là null. – raina77ow

+0

Sau đó, sử dụng ví dụ thứ hai. – Rolice

+0

Đây là những gì tôi đã thử, nhưng nó đặt trường thành 1 và chọn biến thể sai. WHERE beer.id =% s AND md5 (beer.memberID) =% s AND beer.review = 1 AND brand.ID = bia.brandID AND brew.ID = beer.brewID VÀ image.ID = beer.imageID AND (beer.variationID IS NULL HOẶC variation.ID = beer.variationID) – user1600867

0

Bạn có thể sử dụng chức năng so sánh MySQL "IS NULL" hoặc "IS NOT NULL".

Đọc thêm về vấn đề này ở đây: 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

+0

THIS ist SELECT của tôi: CHỌN beer.id AS beerID, beer.barrelID AS barrelID, beer.imageID AS imageID, beer.title AS title, beer.'map' AS map, beer.longitude AS kinh độ, beer.latitude AS latitude, brand.name AS brandName, brew.type AS brewType, image.name AS imageName, variation.name AS variantName TỪ beer, brand, brew, image, biến thể WHERE beer.id =% s AND md5 (beer.memberID) =% s VÀ beer.review = 1 AND brand.ID = beer.brandID AND brew.ID = beer.brewID AND image.ID = beer.imageID AND variation.ID = beer.variationID beer.variationID điều này có thể là NULL, nếu NULL sẽ không có gì b e chọn – user1600867

Các vấn đề liên quan