MySql: UNION не выполняется при выполнении в виде представления - PullRequest
3 голосов
/ 06 февраля 2009

Я пытаюсь создать представление для СОЮЗА из 2 операторов выбора, которые я создал.

UNION работает нормально при индивидуальном исполнении

Но проблема в том, что только 1-я часть UNION выполняется, когда я выполняю ее как представление.

Я использую следующий запрос:

SELECT DISTINCT products.pid AS id, 
                products.pname AS name, 
                products.p_desc AS description,
                products.p_uid AS userid,
                products.p_loc AS location,
                products.isaproduct AS whatisit 
           FROM products
UNION

SELECT DISTINCT services.s_id AS id, 
                services.s_name AS name, 
                services.s_desc AS description,
                services.s_uid AS userid,
                services.s_location AS location,
                services.isaservice AS whatisit 
           FROM services
          WHERE services.s_name

Выше работает нормально, когда я выполняю его отдельно. Но когда я использую его в качестве представления, он не дает мне результатов сервисной части.

Может ли кто-нибудь помочь мне с этим?

Ответы [ 2 ]

0 голосов
/ 13 ноября 2010

Если бы вы могли дать набор результатов для каждого отдельного запроса выше, а затем также дать набор результатов для запроса UNION, мы, вероятно, могли бы предоставить лучший ответ на ваш вопрос. Моя внутренняя реакция заключается в том, что второй запрос может возвращать дублирующееся значение, и поскольку вы используете UNION, дубликаты удаляются. Если вы использовали UNION ALL, будут возвращены все повторяющиеся строки. Например, если первый запрос вернул строку:

1 name1 description1 10 Home Y
2 name2 description2 20 Work Y

и возвращен второй ряд:

1 name1 description1 10 Home Y

Результирующий вывод будет:

1 name1 description1 10 Home Y
2 name2 description2 20 Work Y

Если вы хотите, чтобы все строки были возвращены:

1 name1 description1 10 Home Y
2 name2 description2 20 Work Y
1 name1 description1 10 Home Y

Тогда вы бы использовали UNION ALL вместо оператора UNION.

0 голосов
/ 06 февраля 2009

я думаю, что ваши поля userid и location меняются местами в двух выборках из объединения, если для разных типов данных вы получите ошибку, если нет, вы получите неправильные результаты ... это так?

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