2012-08-15 59 views
7

我需要我的帮助SELECT只能在where子句IF NOT NULL

我有一个字段,可NULL,并在其中存储有外键。

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

因此,如果它是NULL什么也没有发生。

如何检查beerID是否为NOT NULL因此我可以使用"beerBrandID = beerID"

+7

+1,因为你有一个名为beerImage – goat 2012-08-15 14:55:43

+0

表,你能否澄清你的问题一点?我看到它的方式,在'beerImage'表中有一个字段'beerId',它被用作外键,但是可以为空,对吗?你是否需要一次收集两张表格的数据? – raina77ow 2012-08-15 14:56:27

+0

使它成为啤酒图像表名称的+2,你有我的投票。 – Michael 2012-08-15 15:07:38

回答

2

如果要包括记录那里没有比赛,你需要一个外部联接

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

这导致 未知的列'啤酒.VariationID'在'条款' – user1600867 2012-08-15 15:41:33

+0

尝试移动啤酒到 – FJT 2012-08-15 15:44:16

+0

年底这是它,感谢LOT !!!! – user1600867 2012-08-15 15:55:30

0

要检查空/不为空,使用IS NULL/IS NOT NULL

AND beerID IS NOT NULL 
+0

WHERE beerBRewID = brewID AND beerBrandID = beerID和beerID IS NOT NULL 这样吗? – user1600867 2012-08-15 14:53:37

7

你可能需要的东西是这样的:

第一个例子:

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为null的记录以及beerBrandID等于beerID(两者)的啤酒。

第二个将只返回其对应于beerBrandID啤酒(不包括NULL beerIDs)。

+0

如果beerBrandId = beerId,beerId肯定不为null。 – raina77ow 2012-08-15 14:54:29

+0

然后使用第二个示例。 – Rolice 2012-08-15 14:57:01

+0

这是我试过的,但它将字段设置为1并选择错误的变体。 WHERE beer.id =%s和MD5(beer.memberID)=%s和beer.review = 1 AND brand.ID =啤酒。brandID AND brew.ID = beer.brewID AND image.ID = beer.imageID AND(beer.variationID IS NULL OR variation.ID = beer.variationID) – user1600867 2012-08-15 15:12:39

0

您可以使用 “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

+0

THISST我的SELECT: 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纬度, brand.name AS brandName,brew.type AS brewType,image.name AS imageName,variation.name AS variationName从啤酒,品牌,酿造,图像,变化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 AND variation.ID = beer.variationID beer.variationID这可以是NULL,如果它的NULL什么都不会b e selected – user1600867 2012-08-15 15:03:25