Mysql WHERE子句仅当不为NULL时

Mysql WHERE子句仅当不为NULL时,mysql,Mysql,我的选择需要帮助 我得到了一个可以为NULL的字段,其中存储了一个外键 SELECT * FROM beerImage WHERE beerBRewID = brewID AND beerBrandID = beerID <--- this can be NULL 所以如果它为空,什么也不会发生 如何检查BeerBrid是否为非空,以便使用beerBrandID=BeerRid?要检查是否为空/非空,请使用为空/非空 AND beerID IS NOT NULL 你可能需要这样的东西:

我的选择需要帮助

我得到了一个可以为NULL的字段,其中存储了一个外键

SELECT * FROM beerImage WHERE beerBRewID = brewID AND beerBrandID = beerID <--- this can be NULL
所以如果它为空,什么也不会发生


如何检查BeerBrid是否为非空,以便使用beerBrandID=BeerRid?

要检查是否为空/非空,请使用为空/非空

AND beerID IS NOT NULL

你可能需要这样的东西:

第一个例子:

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
第一个示例将允许您显示BeerGrid为null的记录以及beerBrandID等于BeerGrid的啤酒


第二个将返回与beerBrandID对应的啤酒,不包括空啤酒。

您可以使用IS NULL或IS NOT NULL MySQL比较函数

请在此处阅读更多信息:
http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.htmloperator_is-null

如果要包含不匹配的记录,则需要外部联接

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 
在where子句中使用with CASE语句怎么样

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

其中beerBRewID=brewID和beerBrandID=beerID,beerID不是空的,就像这样?如果beerBrandID=beerID,beerID肯定不是空的。这是我尝试的,但它将字段设置为1并选择了错误的变体。其中beer.id=%s和md5beer.memberID=%s和beer.review=1,brand.id=beer.brandID和brew.id=beer.brewID和image.id=beer.imageID和beer.variationID为NULL或variation.id=beer.variationID这是第一个示例:…为NULL或…-它将返回空值variationId,选择第二个,在-。。不为NULL,并且…brand.ID=beer.brandID和brew.ID=beer.brewID和image.ID=beer.imageID和beer.variationID不为NULL,variation.ID=beer.variationID没有结果:-+1因为您有一个名为beerimage的表,您能稍微澄清一下您的问题吗?在我看来,在beerImage表中有一个字段beerId,用作外键,但可以为空,对吗?您需要同时从两个表中收集数据吗?将beerImage表名设为a+2,您有我的投票权。请提供一些示例数据和所需结果。不清楚您在这里到底想做什么。Table:Brew ID=1 Name=Pils Table:Brand ID=1 Name=Becks Table:Variation ID=1 Name=NonAlkohol Table:beer ID=1 brewID=1 BrandID=1 variationID=NULL这是我的选择:选择beer.ID作为beerID,beer.barrelID作为barrelID,beer.imageID作为imageID,beer.title作为title,beer.map作为map,beer.longitude作为经度,beer.lation作为纬度,brand.name作为品牌名,brew.type作为brewType,image.name作为imageName,variation.name作为variationName来自beer,brand,brew,image,变量,其中beer.id=%s和md5beer.memberID=%s和beer.review=1,brand.id=beer.brandID和brew.id=beer.brewID,image.id=beer.imageID和variation.id=beer.variationID-beer.variationID这可以为空,如果为NULL,则不会选择任何内容。这将导致“on子句”中的未知列“beer.VariationID”尝试将beer移动到from的末尾