【发布时间】:2013-10-30 23:27:35
【问题描述】:
有没有办法在 Google Fuision Tables Query 上实现这一点?
...WHERE (('Field 1' = 'Value 1') OR ('Field 2' = 'Value 1'))
我知道 OR 未在 Google Fusion Tables 上实现,但我想知道此查询是否可行。谢谢。
【问题讨论】:
有没有办法在 Google Fuision Tables Query 上实现这一点?
...WHERE (('Field 1' = 'Value 1') OR ('Field 2' = 'Value 1'))
我知道 OR 未在 Google Fusion Tables 上实现,但我想知道此查询是否可行。谢谢。
【问题讨论】:
对于数量相对较少的条件,您可以使用 IN,如 SQL reference 中所述。所以在你的例子中,这将是
WHERE 'Field 1' IN ('Value 1', 'Value 2')
【讨论】:
实际上有一些解决方法可以解决 OR 子句的缺失问题。它们是否值得付出努力,我会留给读者来判断。
解决这个问题的一种方法是用 AND 子句来表达 OR 子句。确切地说是三个 AND 子句,我们最终会得到 3 个不同的融合表查询,如下所示:
SELECT * FROM <table_id> WHERE 'Field 1' = 'Value 1' AND 'Field 2' = 'Value 1'
SELECT * FROM <table_id> WHERE 'Field 1' = 'Value 1' AND 'Field 2' NOT EQUAL TO 'Value 1'
SELECT * FROM <table_id> WHERE 'Field 1' NOT EQUAL TO 'Value 1' AND 'Field 2' = 'Value 1'
这三个查询的组合结果实际上就是 OR 查询在融合表中可用时的结果。
另一种方法是执行 OR 子句(又名 NOR)的逆操作,如下所示:
SELECT ROWID FROM <table_id> WHERE 'Field 1' NOT EQUAL TO 'Value 1' AND 'Field 2' NOT EQUAL TO 'Value 1'
此查询返回将被 OR 子句丢弃的行的 ROWID。因此,如果我们要获取表中所有 ROWID 的列表并删除由 NOR 查询生成的那些 id,我们将留下 OR 查询将产生的行 id。我们可以反过来使用这些 ROWID 编写查询以提取完整的行数据。
【讨论】: