如何在mysql中对引用表中的值应用AND运算符?
我有一个名为如何在mysql中对引用表中的值应用AND运算符?,mysql,join,Mysql,Join,我有一个名为Raipur\u Restaurant\u List的带有模式的表 RestID name username password .... .... .... and some more fields 其中RestID是主键 另一个名为Raipur_Restaurant_List_Dine_Types的表具有模式 RestID Dine_Name 其中RestID是表Raipur\u Restaurant\u列表引用的外键 示例数据: 赖布尔餐厅列表: RestID name
Raipur\u Restaurant\u List
的带有模式的表
RestID
name
username
password
....
....
....
and some more fields
其中RestID是主键
另一个名为Raipur_Restaurant_List_Dine_Types
的表具有模式
RestID
Dine_Name
其中RestID是表Raipur\u Restaurant\u列表引用的外键
示例数据:
赖布尔餐厅列表:
RestID name username password ....
1001 Demo Name 1 Demo Username 1 Demo Password 1 ....
1002 Demo Name 2 Demo Username 2 Demo Password 2 ....
1003 Demo Name 3 Demo Username 3 Demo Password 3 ....
Raipur_餐厅_列表_餐厅_类型:
RestID Dine_Name
1001 HomeDelivery
1002 Bakeries
1001 Bakeries
我怎样才能找到既有送货上门又有面包店的餐厅
我尝试了以下代码:
SELECT DISTINCT (RRL.RestID)
, RRL.Username
, RRL.openAir
, RRL.Name
, RRL.Address
, RRL.thumbnailBckImg
, RRL.Fixed_Disc
, RRL.rating
, RRL.searched
FROM Raipur_Restaurant_List AS RRL
JOIN Raipur_Restaurant_List_Dine_Types AS RRLDT
ON RRL.RestID = RRLDT.RestID
WHERE RRLDT.Dine_Name = 'DineIN'
AND RRLDT.Dine_Name = 'Bakeries'
LIMIT 0,200
但它不会获取所需的行。您可以使用having
子句将结果限制为与这两种类型匹配的行:
SELECT
RRL.RestID, RRL.Username, RRL.Name
FROM Raipur_Restaurant_List AS RRL
JOIN Raipur_Restaurant_List_Dine_Types AS RRLDT
ON RRL.RestID = RRLDT.RestID
WHERE RRLDT.Dine_Name IN ('HomeDelivery', 'Bakeries')
HAVING COUNT(*) >= 2
最后一行可以更加明确:具有COUNT(不同的RRLDT.Dine_Name)=2代码>虽然对计数应用distinct可能会影响性能-但我不确定这一点
返回匹配项的所有行的版本:
SELECT RRL.RestID, RRL.Username, RRL.Name, RRLDT.Dine_Name
FROM Raipur_Restaurant_List AS RRL
JOIN Raipur_Restaurant_List_Dine_Types AS RRLDT
ON RRL.RestID = RRLDT.RestID
WHERE EXISTS (
SELECT 1
FROM Raipur_Restaurant_List_Dine_Types
WHERE Dine_Name IN ('HomeDelivery', 'Bakeries')
AND RestID = RRL.RestID
HAVING COUNT(DISTINCT Dine_Name) = 2
)
还有第二个版本的示例。试试看
SELECT DISTINCT RRL.RestID, RRL.Username, RRL.openAir, RRL.Name, RRL.Address, RRL.thumbnailBckImg, RRL.Fixed_Disc, RRL.rating, RRL.searched
FROM Raipur_Restaurant_List AS RRL
JOIN Raipur_Restaurant_List_Dine_Types AS RRLDT ON RRL.RestID = RRLDT.RestID
WHERE RRLDT.Dine_Name IN ('HomeDelivery','Bakeries')
LIMIT 0 , 200;
如果您需要至少2个计数,请尝试下面的方法-
SELECT DISTINCT RRL.RestID, RRL.Username, RRL.openAir, RRL.Name, RRL.Address, RRL.thumbnailBckImg, RRL.Fixed_Disc, RRL.rating, RRL.searched
FROM Raipur_Restaurant_List AS RRL
JOIN Raipur_Restaurant_List_Dine_Types AS RRLDT ON RRL.RestID = RRLDT.RestID
WHERE RRLDT.Dine_Name IN ('HomeDelivery','Bakeries')
having count(distinct RRLDT.Dine_Name)>1;
请注意,DISTINCT不是一个函数,没有ORDER BY的LIMIT是(相当)没有意义的SELECT。。。哪里在('a','b')组中,由。。。HAVING COUNT([DISTINCT]…)=x[其中x=即使使用HAVING子句,其结果也与本例中的OR运算符类似,并为我提供其中一个参数的数据,但我需要同时包含这两个参数的数据(HomeDelivery和Bakeries)不,我刚刚编辑了你创建的小提琴-你可以查看我的结果屏幕截图-在第4行之后,所有人都只有送货上门,没有面包店和他们的餐厅名称更新供我评论-使用having子句,我只得到一行,这不是我的任务所必需的,很抱歉之前的评论有误-每个Di应该有两行每个RestID都有一个新的名字,其中餐厅的名字都是送货上门和面包店——我只是在问题中问这个