Mysql 如何在单个查询中进行选择?

Mysql 如何在单个查询中进行选择?,mysql,select,Mysql,Select,我试图从mysql中的4个表中选择两个(逗号分隔)项,一个用于“菜系”,另一个用于“设施” 我就是这样尝试的: $query = "SELECT GROUP_CONCAT(DISTINCT c.name SEPARATOR ', ') AS cuisines, GROUP_CONCAT(DISTINCT f.name SEPARATOR ', ') AS facilities FROM cuisines c, facilities f

我试图从mysql中的4个表中选择两个(逗号分隔)项,一个用于“菜系”,另一个用于“设施”

我就是这样尝试的:

$query = "SELECT GROUP_CONCAT(DISTINCT c.name SEPARATOR ', ') AS cuisines,
                 GROUP_CONCAT(DISTINCT f.name SEPARATOR ', ') AS facilities
          FROM cuisines c, facilities f
            INNER JOIN restaurant_cuisines rc ON rc.cuisine_id = c.id   
            INNER JOIN restaurant_facilities rf ON rf.facility_id = f.id    
          WHERE rc.restaurant_id = 16 AND rf.restaurant_id = 16"; 
但这个查询不起作用。但是,如果我对这两个选择使用两个单独的查询,那么我可以让它工作。但我正在寻找一个单一查询的解决方案

如果我使用两个单独的查询,这就是输出:

mysql> SELECT GROUP_CONCAT(DISTINCT c.name SEPARATOR ', ') AS cuisines
    -> FROM cuisines c
    -> INNER JOIN restaurant_cuisines rc ON rc.cuisine_id = c.id
    -> WHERE rc.restaurant_id = 15;
+-----------------------------------------+
| cuisines                                |
+-----------------------------------------+
| American, Asian, Bars & Pubs, Beverages |
+-----------------------------------------+
1 row in set (0.14 sec)
有人能告诉我mysql中有可能吗


多谢各位

要使GROUP BY语句生效,您需要添加GROUP BY语句:

SELECT cuisines,facilities FROM (
SELECT GROUP_CONCAT(DISTINCT c.name SEPARATOR ', ') AS cuisines, restaurant_id
      FROM cuisines c
        INNER JOIN restaurant_cuisines rc ON rc.cuisine_id = c.id   
      WHERE rc.restaurant_id = 16) a
INNER JOIN (
SELECT GROUP_CONCAT(DISTINCT f.name SEPARATOR ', ') AS facilities,restaurant_id
      FROM facilities f
        INNER JOIN restaurant_facilities rf ON rf.facility_id = f.id    
      WHERE rf.restaurant_id = 16
      GROUP BY rf.restaurant_id) b ON a.restaurant_id=b.restaurant_id;

不要在from子句中混合使用
内部联接
符号。它们是两个独立的标准(ANSI和非ANSI)。编译器必须选择并使用其中一个,不能同时使用这两个标准。换句话说

FROM cuisines c, <-- This isn't allowed with inner join syntax.. 
     facilities f
INNER JOIN restaurant_cuisines rc ON rc.cuisine_id = c.id   
INNER JOIN restaurant_facilities rf ON rf.facility_id = f.id   

然而,我相信你错过了餐厅烹饪和餐厅设施之间的一个连接点,可能是在餐厅Id上,这将允许你消除这两个
rc.restaurant\u Id=16

和rf.restaurant_id=16

请使用您想要的输出(以及两个表中餐馆16的输入)进行更新@amdixon,更新了我的问题。是
restaurant\u id
对于这两个表都是相同的。您的查询是混合、表示法和内部联接表示法。这就是为什么会出现错误选择一个。错误1054(42S22):“字段列表”中的未知列“设施”抱歉,没有完成查询。请参阅1分钟后编辑错误1054(42S22):字段列表中的未知列“c.name”重试:)复制/粘贴发布错误1054(42S22):on子句中的未知列“a.restaurant_id”
SELECT GROUP_CONCAT(DISTINCT c.name SEPARATOR ', ') AS cuisines,
       GROUP_CONCAT(DISTINCT f.name SEPARATOR ', ') AS facilities
FROM cuisines c
INNER JOIN restaurant_cuisines rc 
  ON rc.cuisine_id = c.id   
INNER JOIN restaurant_facilities rf 
  ON rc.restraunt_Id = Rf.restraunt_ID
INNER JOIN facilities f
  ON rf.facility_id = f.id    
WHERE rc.restaurant_id = 16; 
SELECT GROUP_CONCAT(DISTINCT c.name SEPARATOR ', ') AS cuisines,
       GROUP_CONCAT(DISTINCT f.name SEPARATOR ', ') AS facilities
FROM cuisines c
    ,facilities f
    , restaurant_cuisines rc 
    , restaurant_facilities rf  
WHERE rc.restaurant_id = 16 
  AND rf.restaurant_id = 16
  AND rc.cuisine_id = c.id   
  AND rf.facility_id = f.id