SQL:结合结果

时间:2011-10-16 09:57:58

标签: mysql sql

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'等等。

2 个答案:

答案 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%'