从2个伪表中查询,托管在同一个真实表中

时间:2011-07-11 09:45:34

标签: sql sql-server-2008

我们有两张桌子。要查询具有相同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

1 个答案:

答案 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”作为单独的对象,以避免这种连续过滤。或者不要合并它们......