SQL: объединение результатов - PullRequest
3 голосов
/ 16 октября 2011
SELECT * FROM `restaurants` WHERE name LIKE '%string%'

SELECT * FROM `restaurants` WHERE address LIKE '%string%'

SELECT * FROM `menu_items` WHERE name LIKE '%string%'

У меня есть эти запросы.

В данный момент я показываю результаты каждого запроса отдельно. Я хотел бы объединить их всех.

И все результаты должны иметь псевдонимы с тем, откуда они берутся. Пример, когда он показывает элемент / строку из menu_items, вы должны увидеть в столбце «Тип», что это «элемент».

И 'address' для результатов адреса ресторанов и 'name' для результатов названия ресторана.

в MySQL

Как я могу это сделать?

Мой конечный результат должен выглядеть следующим образом: Вы ищете "s"

Spagetti - item
Sonus Suni - restaurant
Sunssisway 1232 - restaurant address
Delicous Spaga - item

Так что мне нужно было бы создать свой собственный столбец псевдонимов. 'Item' AS 'Type' и т.д ..

Ответы [ 2 ]

2 голосов
/ 16 октября 2011

Если вы хотите объединить таблицы с разными столбцами, вы должны указать, какие столбцы вы хотите.

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 голос
/ 16 октября 2011

Если во всех трех таблицах одинаковое количество столбцов, вы можете использовать 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 по оператору UNION

РЕДАКТИРОВАТЬ: обновление

Если таблица menu_items имеет FK для таблицы restaraunts, вы можете объединить обе таблицы и выбрать консолидированные выходные данные, например:

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%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...