我有4张表格如下
表1:restos
结构:
resu_id resu_name resu_address
-------------------------------------
1 ABC Exapmple
2 DEF Example
3 GHD Example
表2:foodtype
结构:
id typename
---------------
12 Indian
23 Punjabi
表3:resto_foodtypes
结构:
resu_id foodty_id
--------------------
1 12
2 23
3 12
表4:discnts
结构:
id resu_id amt_dscPer(%age discount)
---------------------------
19 1 15
20 2 25
现在我想展示餐厅以及餐厅的折扣。
目前正在显示餐馆,但是discnts
表中没有的餐馆正在从discnts
表返回空值。
是使用
的查询SELECT * from `restos` r join resto_foodtypes rf on rf.resu_id = r.resu_id
join foodtype f on rf.foodty_id = f.id left join discnts dcfm on
r.resu_id= dcfm.resu_id where true;
我希望discnts
表中不存在的餐馆不应包含在结果集中。对于例如resu_id=3
表中没有discnts
。
答案 0 :(得分:0)
要排除在discnts表中没有条目的结果,请使用INNER JOIN
代替LEFT JOIN
。
要包含这些结果,但显示0
(而不是默认值NULL
),您可以使用IFNULL(expr, 0)
功能:
SELECT
r.resu_name AS Name,
f.typename AS Food,
IFNULL(dcfm.amt_dscPer, 0) AS Discount
FROM `restos` r
JOIN resto_foodtypes rf ON rf.resu_id = r.resu_id
JOIN foodtype f ON rf.foodty_id = f.id
LEFT JOIN discnts dcfm ON r.resu_id= dcfm.resu_id;
如果第一个参数不为空,则IFNULL返回第一个参数,如果expr
确实为空,则返回第二个参数。