Mysql 如何在单个查询中进行选择?
我试图从mysql中的4个表中选择两个(逗号分隔)项,一个用于“菜系”,另一个用于“设施” 我就是这样尝试的: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
$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