Mysql UNION способ отличаться от того, какая строка результата таблицы

Допустим, у меня есть запрос ниже.

SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City;

Чтобы не сказать, что в обеих таблицах есть один и тот же город Нью-Йорк, который мне даст:

| City     |
| -------- | 
| NY       |
| NY       |

Я получаю это в таблице HTML, есть ли способ отличаться от строки результатов таблицы MySQL, кроме создания другого столбца в самих таблицах, например, столбца type.

Может быть, можно добавить что-то к самому набору результатов в запросе?


person ikiK    schedule 01.06.2020    source источник
comment
Ваш запрос не может возвращать этот результат. Вы используете union, который удаляет дубликаты   -  person Gordon Linoff    schedule 02.06.2020


Ответы (4)


Я не понимаю ваших результатов, потому что union удаляет дубликаты, поэтому он должен создавать только одну строку.

Если вы хотите включить имя таблицы, я бы посоветовал использовать select distinct и union all:

SELECT DISTINCT 'customers' as type, City FROM Customers
UNION ALL
SELECT DISTINCT 'suppliers' as type, City FROM Suppliers
ORDER BY City;
person Gordon Linoff    schedule 01.06.2020
comment
Вы правы, извините, я устал упрощать, запрос намного больше, а некоторые столбцы, такие как идентификаторы и номера дел, являются одними и теми же поисковыми запросами. Я получаю правильные результаты. Но пример неверный. Я приму это замечание как наиболее правильное, чтобы другие читатели тоже не запутались. - person ikiK; 02.06.2020

Добавьте дополнительный столбец с литеральным строковым значением в качестве имени таблицы вместе с существующим запросом. Это поможет вам различать ряды.

SELECT 'Customers' as Type, City FROM Customers
UNION ALL
SELECT 'Suppliers' as Type, City FROM Suppliers
ORDER BY City;

Обновление: UNION удаляет повторяющиеся строки. Таким образом, если ваши таблицы имеют одинаковые значения в столбце City, будут возвращены уникальные строки. Вы должны использовать UNION ALL. Это вернет все строки, и добавление строкового литерала в качестве столбца типа поможет вам различать строки.

Спасибо @Gordon за указание на это.

person Maverick    schedule 01.06.2020

Добавьте дополнительный столбец, содержащий буквальное значение в зависимости от того, какой это подзапрос.

SELECT 'Customers' AS type, City
FROM Customers
UNION
SELECT 'Suppliers' AS type, City
FROM Suppliers
ORDER BY City, type
person Barmar    schedule 01.06.2020

вы можете добавить столбец в свой запрос, как показано ниже.

SELECT city, 'c' as type FROM Customers
UNION
SELECT city, 's' as type FROM Suppliers
ORDER BY city, type;
person zealous    schedule 01.06.2020