我有以下表格结构(表名称通知)
_id | NotificationFor | DateToNotify | isExtraOrdinary |
NotificationData | TypeNotification | FriendsName |
RadioType | PrimaryId
我对名为NotificationsCron的表具有完全相同的模式,但有时第二个表在Notifications表中具有完全相同的记录。我使用以下查询来获取记录:
SELECT *
FROM (SELECT *
FROM Notifications
WHERE TypeNotification <> 'Event' AND RadioType <> '3'
UNION
SELECT *
FROM NotificationsCron
WHERE TypeNotification <> 'Event' AND RadioType <> '3'
) T
ORDER BY SUBSTR(DATE('NOW'), 0) > SUBSTR(DateToNotify, 0),
SUBSTR(DateToNotify, 0);
然而,当我使用上述内容时,我得到重复,我在互联网上遇到类似的问题,发现UNION ALL返回重复,而UNION没有。在我的情况下哪个不起作用,我遇到的第二个重点是指定每个列名而不是SELECT *我想知道它是如何产生影响的 - 有兴趣知道它在基本级别如何工作?
以下是NotificationsCron表的图片:
以下是通知表中的一张图片:
答案 0 :(得分:4)
我遇到的第二个重点是指定每一列 名称而不是SELECT *我想知道它是如何形成的 差
后来,有人在桌子上添加了一个字段。任何使用“SELECT *”的查询都会突然获得一个新字段。有时这是正确的。有时会产生意外结果。在大多数情况下,最好始终明确命名列而不是使用通配符。
其次,如果您实际上不需要所有列,则可以通过限制返回的列来提高性能。更进一步,在某些数据库中,INDEX可以满足查询而无需转到表,因此如果使用列列表,则允许进行优化。使用SELECT *它不能。