如何在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都有一个新的名字,其中餐厅的名字都是送货上门和面包店——我只是在问题中问这个