SELECT * FROM `restaurants` WHERE name LIKE '%string%'
SELECT * FROM `restaurants` WHERE address LIKE '%string%'
SELECT * FROM `menu_items` WHERE name LIKE '%string%'
我有这些疑问。
此刻我分别显示每个查询结果。我想把它们全部结合起来。
并且所有结果都应该包含它们来自哪里的别名。 例如,当它显示menu_items中的项目/行时,您应该能够在“类型”列中看到它是“项目”。
餐馆的'地址'用于说明餐馆名称结果的结果和'名称'。
MySQL中的
我该怎么做?
我的最终输出应如下所示:您在“s”之后搜索
Spagetti - item
Sonus Suni - restaurant
Sunssisway 1232 - restaurant address
Delicous Spaga - item
所以我需要创建自己的别名列。'item'AS'Type'等等。
答案 0 :(得分:2)
如果要将表组合为不同的列,则必须指定所需的列。
SELECT
'Name' AS Type,
Id AS R_Id,
NULL AS I_Id,
Name,
Address,
NULL AS M_Id
FROM Restaurants
WHERE Name LIKE '%string%'
UNION ALL
SELECT
'Address' AS Type,
Id AS R_Id,
NULL AS I_Id,
Name,
Address,
NULL AS M_Id
FROM Restaurants
WHERE Address LIKE '%string%'
UNION ALL
SELECT
'Item' AS Type,
NULL AS R_Id,
Id AS I_Id,
Name,
NULL AS Address,
M_Id
FROM Menu_Items
WHERE Name LIKE '%string%'
答案 1 :(得分:1)
如果所有三个表的列数相同,则可以使用UNION ALL:
SELECT * FROM `restaurants` WHERE name LIKE '%string%'
UNION ALL
SELECT * FROM `restaurants` WHERE address LIKE '%string%'
UNION ALL
SELECT * FROM `menu_items` WHERE name LIKE '%string%'
<强> !!!重要:强>
第一个SELECT语句中的列名用作 返回结果的列名称。列出的选定列 每个SELECT语句的相应位置应该相同 数据类型。 (例如,第一列选择的第一列 语句应与选择的第一列具有相同的类型 其他陈述。)
如果相应SELECT列的数据类型不匹配,则 UNION结果中列的类型和长度考虑在内 所有SELECT语句检索的值。
有关示例的详细信息,请参阅官方MySQL Documentation on UNION statement
编辑:更新
如果menu_items
表在restaraunts
表上有FK,您可以加入两个表并选择合并输出数据,例如:
SELECT r.*, mi.*
FROM restaurants r
INNER JOIN menu m ON m.R_ID = r.ID
INNER JOIN menu_items mi ON m.ID = mi.M_ID
WHERE r.name LIKE '%string%'
AND r.address LIKE '%string%'
AND mi.name LIKE '%string%'