我需要解决一个关于基于字段连接表的问题。我有 3 张桌子:
NEWS (id,title)
COMMENTS (id,idtopic,message)
NOTIFICATIONS (iduser,idnews,idtopic,idpost)
当COMMENTS
hasidtopic=0
时为主题,>0 时为主题回复。由NOTIFICATIONS
用户了解各种信息。
现在我想从其他表中获取字段,选择NOTIFICATIONS
.
基础SELECT
是:
SELECT idnews,idtopic,idpost FROM notifications WHERE iduser=X
现在我想加入:
- NEWS->标题,如果 idnews>0
- COMMENTS->message,如果 idtopic>0
- COMMENTS->message,如果 idpost>0
我想我应该做这样的事情:
SELECT CASE idnews>0 THEN ??,
CASE idtopic>0 THEN ??, CASE idpost>0 THEN
FROM NOTIFICATIONS
我想总是返回一个带有标题或消息的字段,因为 idnews/idtopic/idpost 之一总是 >0
如何在不加入每条记录的每个表的情况下在 SELECT 中选择?我不想做
SELECT *
FROM NOTIFICATIONS
LEFT JOIN NEWS ON NOTIFICATIONS.idnews=NEWS.id
LEFT JOIN COMMENTS ON NOTIFICATIONS.idtopic=COMMENTS.id
LEFT JOIN COMMENTS ON NOTIFICATIONS.idpost=COMMENTS.id
因为性能会比to差CASE WHEN idnews>0 OR idtopic>0 OR idpost>0
。