-1

是否可以在不将WHERE其加入其他表的情况下执行语句?例如:

Table1(t1_id,name)

Table2(t2_id, fk_t1_id, something)

Table3(t3_id, fk_t2_id, blah)

我想做这个:

SELECT name, something 
FROM table1 
JOIN table2 ON t1_id = fk_t1_id 
WHERE blah = 'somestring'

还是我也必须加入 table3 才能使WHERE语句生效?

4

5 回答 5

1

在您的示例中,您需要Table3才能到达该blah列。另外两个表不知道是什么blah

于 2013-01-10T19:24:19.087 回答
1

您必须加入 table3。除非您在查询中包含该表,否则查询解析器无法知道您需要该表中的某些内容或进行比较。

SELECT name, something
FROM table1 t1
JOIN table2 t2 ON t1.t1_id = t2.fk_t1_id
JOIN table3 t3 ON t2.t2_id = t3.fk_t2_id
WHERE t3.blah = 'somestring'
于 2013-01-10T19:25:07.663 回答
0

是的,您需要加入 Table3。

于 2013-01-10T19:24:25.690 回答
0

您可以在 where 条件下执行子字符串

SELECT name, something 
FROM table1 JOIN table2 ON t1_id = fk_t1_id 
WHERE blah IN (Select blah from table3)
于 2013-01-10T19:24:46.077 回答
0

与 table3 上的内部联接相反,半联接将起作用:

SELECT t1.name, t2.something
FROM table1 t1
JOIN table2 t2 ON t1.t1_id = t2.fk_t1_id
WHERE t2.t2_id IN (SELECT fk_t2_id FROM table3 WHERE blah = 'something')
于 2013-01-10T20:35:10.637 回答