当字段名称相同时,检查表中的值

时间:2011-06-09 17:23:56

标签: mysql

我在查询中使用了几个表,并且所有表都有一个列deleted,用于指示记录是否已删除(0或1)。我一直在做的是:

WHERE table1.deleted = 0 and table2.deleted = 0 and table3.deleted = 0)

我想知道是否有办法在表格中指明相同字段名称的值,例如:

WHERE *.deleted = 0

显然,上述方法无效。可以这样做吗?

4 个答案:

答案 0 :(得分:1)

无法完成。您需要在第一个示例中明确引用每一列。

答案 1 :(得分:1)

使用按位

WHERE (table1.deleted & table2.deleted & table3.deleted) = 0

请参阅:http://dev.mysql.com/doc/refman/5.5/en/bit-functions.html

甚至更短:

WHERE NOT(table1.deleted & table2.deleted & table3.deleted)

<强>声明
正如大卫正确地指出的那样,仅仅因为它可以做到并不是一个好主意 MySQL将无法在此查询中使用索引,因此该版本将比原始版本慢。

答案 2 :(得分:0)

根据我们的讨论,这是一个潜在的解决方案。根据每个引用表中需要tableX.deleted = 0的查询和子查询的数量,在这些表上设置视图的最短时间可能是值得的。每张桌子都有这样的东西:

CREATE VIEW table1deleted AS SELECT * FROM table1 WHERE deleted = 0;

然后在您的查询中,您选择table1deleted而不是table1,因为table1deleted视图中的所有项目都已经过deleted = 0过滤。

答案 3 :(得分:0)

由于没有办法在SQL中直接执行此操作,因此请考虑将SQL表达式存储在外部文件中,并使用工具生成它们,以便在宏中存储重复的表达式。或者你可以用你编写的任何语言编写函数来生成SQL。

Johan建议的技巧可能会降低性能,这里的真正目标是使SQL表达式更易于处理。所以解决方案是停止对其进行硬编码并以更复杂的方式处理它们。