【发布时间】:2014-08-02 03:11:29
【问题描述】:
我有继承的 SQL 表:
- history (id, date, ip user_id):“超级表”。
- history_connection (id,user_agent):映射用户的帐户连接。
- history_email(id,email):映射用户的电子邮件修改。
目标是在我的数据库中登录有关用户的不同类型的历史记录。 history_connection 和 history_email 的“id”列是一个主键和一个指向 history 表 id 的外键。
现在想象一下,在请求中,我不需要访问“子表”列,但我需要知道它是哪种类型的历史记录。马上,我想到了 LEFT OUTER JOIN:
SELECT h.id,h.date,h.ip,h.user_id,hc.id,he.id
FROM history h
LEFT OUTER JOIN history_connection hc
ON h.id=hc.id
LEFT OUTER JOIN history_email he
ON h.id=he.id
如果 hc.id 不为空,我可以推断历史的类型:在这种情况下,连接历史。问题是我认为它在性能方面不是很有效,因为如果我在“超类”history中添加一个“类型”列,我可以将这样的查询简化为:
SELECT id,date,ip,user_id,type
FROM history
我的问题是,您认为出于性能原因我需要添加类型列吗?
【问题讨论】:
-
你想
LEFT OUTER JOIN但使用INNER JOIN?
标签: mysql database join left-join