【发布时间】:2018-06-14 15:33:57
【问题描述】:
我试图通过将电子邮件地址放在 3 个不同的表(oc_customer、oc_journal2_newsletter 和 oc_d_newsletter_subscriber)中来执行 MySQL 查询。当所有电子邮件都放入 1 列时,我想对其进行分组以避免重复并将数据升序排序。
我在下面有以下查询,但每次在有效执行查询之前收到有关无效令牌“)”的消息。该消息指向具有代码的行 .... subscribed = '1')....
有人可以帮我避免这个警告吗?
SELECT `emailTOTAAL`.`emailTOT`
FROM (
SELECT
`oc_customer`.`email` AS `emailTOT`
FROM
`oc_customer`
WHERE
`oc_customer`.`language_id` = '2' AND
`oc_customer`.`newsletter` = '1'
UNION ALL
SELECT
`oc_journal2_newsletter`.`email` AS `emailTOT`
FROM
`oc_journal2_newsletter`
UNION ALL
SELECT
`oc_d_newsletter_subscriber`.`email` AS `emailTOT`
FROM
`oc_d_newsletter_subscriber`
WHERE
`oc_d_newsletter_subscriber`.`language_id` = '2' AND
`oc_d_newsletter_subscriber`.`subscribed` = '1')
AS `emailTOTAAL`
GROUP BY
`emailTOTAAL`.`emailTOT`
ORDER BY
`emailTOTAAL`.`emailTOT` ASC
谢谢, 副手
【问题讨论】:
-
订阅的数据类型是什么?
-
订阅的数据类型是int(1)
-
因为这是
MySQL语法,所以我删除了SQL-Server tag。如果您有理由同时标记两个 RDBM,则可以还原。 -
顺便说一句,注意 int(1) 中的 1 几乎没有意义
-
当您只执行联合而不是子选择时会发生什么?为什么不只使用 UNION 而不是 UNION ALL 来删除重复项?