MySQL Union, приоритет таблицы и поддельные столбцы - PullRequest
1 голос
/ 04 апреля 2011

Я пытаюсь запросить 3 в основном несвязанные таблицы.Отношение для всех трех - один столбец (поле адреса электронной почты).Я создал 'union all' и извлек письмо по электронной почте из всех трех таблиц, а затем сгруппировал их в конце, чтобы убедиться в отсутствии дубликатов (я тоже пробовал union).

Моя проблема в том, что все работаетхорошо, но мне нужно знать, является ли каждый адрес электронной почты 1, 0 или NULL в первой таблице.Я попытался вытянуть столбец, а затем добавить "" "Col1" в другие таблицы (избежать ошибки 1222, сопоставьте столбцы).Я могу сделать это, но данные из таблицы 1 перезаписываются «ничто» из таблицы 2, а затем снова ничем в таблице 3.

Вот запрос:

SELECT * FROM (
SELECT email AS emails, COUNT(email) AS qty, '' AS custCountry, '' AS custID, '' AS cName, active AS newsletter
    FROM newsletter
    WHERE email != '' 
    GROUP BY email

UNION ALL

SELECT email AS emails, COUNT(email) AS qty, '' AS custCountry, '' AS custID, '' AS cName, '' AS newsletter
    FROM orders 
    WHERE email != ''
    GROUP BY email

UNION ALL

SELECT email AS emails, COUNT(email) AS qty, country AS custCountry, customerID AS custID, countries.name AS cName, '' AS newsletter
    FROM customers
        LEFT JOIN countries ON customers.country = countries.zoneID
    WHERE email != ''
    GROUP BY email  
) AS newtable

GROUP BY emails
ORDER BY qty DESC

Это работает, пока ядобавьте «активный» столбец, после чего он перезаписывает все, что было в активном столбце, ни с чем.Мне нужна там третья таблица, так как она включает данные о местоположении, которые мне нужно сохранить.Если бы я поставил первую таблицу последней, это дало бы мне «активный», но перезаписал бы столбцы местоположения.

Я не профессионал в MySQL (взгляните!), Поэтому любая помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 05 апреля 2011

Хорошо.Просто на самом деле.Просто объедините нужные данные после выбора объединения таблиц.Это действительно очевидно и, вероятно, труднее объяснить мою проблему, чем просто разобраться в ней.Спасибо, хотя.

0 голосов
/ 04 апреля 2011

Какую проблему вы пытаетесь решить? Вы хотите список уникальных адресов электронной почты из всех трех таблиц, вместе взятых? Если да, вы можете использовать это:

select email from A union select email from B union select email from C

Группировка неверна в вашем фрагменте. Для запроса group by в предложении select могут быть только те столбцы, которые либо присутствуют в предложении group by, либо являются агрегатными функциями, такими как min(), max(), avg(),count()

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

...