我们有两张桌子。要查询具有相同ID的行,您必须执行以下操作:
SELECT * FROM Table1 A, Table2 B WHERE A.id = B.id
现在让表合并到一个全局表中,并添加一个ex-table列。所以,查询
SELECT * FROM Table1
现在看起来像:
SELECT * FROM GlobalTable WHERE tableId = 1
但是第一个查询现在应该怎么看?
SELECT * FROM Table1 A, Table2 B WHERE A.id = B.id
答案 0 :(得分:2)
一个表应该存储一个实体。没有“一个真正的查找表”或“全局表”这样的东西。你也不应该考虑使用EAV。这个问题假设你的所有表都有相同的布局...
然而,我期待更多的代表,因为它不能正常工作......
您应该使用显式JOIN来分隔过滤条件和连接条件
Select *
from
GlobalTable A
JOIN
GlobalTable B ON A.id = B.id
WHERE
A.tableId = 1 AND B.tableId = 2
如果您需要进行OUTER JOIN,那么您可以写这个
Select *
from
(SELECT * FROM GlobalTable WHERE tableId = 1) A
LEFT JOIN
(SELECT * FROM GlobalTable WHERE tableId = 2) B ON A.id = B.id
我建议使用索引视图来保持“tableA”和“tableB”作为单独的对象,以避免这种连续过滤。或者不要合并它们......