我试图做这样的事情:查询子查询
SELECT t1.*,
t2.*
FROM (SELECT *
FROM USER) AS t1,
(SELECT *
FROM t1) AS t2
它不会在MySQL的工作。是否像上述可能?我的另一种选择是采取最后的子查询,并围绕主查询“换行”。想法?
我试图做这样的事情:查询子查询
SELECT t1.*,
t2.*
FROM (SELECT *
FROM USER) AS t1,
(SELECT *
FROM t1) AS t2
它不会在MySQL的工作。是否像上述可能?我的另一种选择是采取最后的子查询,并围绕主查询“换行”。想法?
用途:
SELECT t1.*,
t2.*
FROM (SELECT *
FROM USER) AS t1,
(SELECT *
FROM (SELECT *
FROM USER) AS t1) AS t2
的WITH
语法允许你建立在热膨胀系数的顶部:
WITH t1 AS (
SELECT * FROM USER), -- comma separates them
t2 AS (
SELECT * FROM t1)
SELECT t1.*, t2.*
FROM t1, t2
..但MySQL不支持WITH子句。
为什么不
SELECT t1.*, t2.* FROM USER as t1, USER as t2
?你还应该添加一个条件,否则这将会产生大量的行。
现在,如果你的意思是问怎么来指代前面的子查询,你应该重复它,并添加所需的额外条件:
SELECT t1.*, t2.* FROM (SELECT bar FROM foo WHERE baz=1) as t1,
(SELECT bluz,bar FROM foo WHERE baz=1 AND quux = 0) as t2 WHERE t2.bar = t1.bar
另一种选择是创建一个子查询视图或临时表(t1)
如果2个表的列数相同,则可以使用例如UNION
例如
SELECT *
FROM USER
UNION
SELECT *
FROM t1
如果它们不具有相同的列,那么您将需要使用某种方式来加入表,如使用外键。例如。
SELECT *
FROM USER as t1
JOIN t1 as t2 (on t1.id = t2.id)
我假设你的实际查询要复杂得多。是否有可能你可以创建一个视图来表示你的子查询,然后你可以使用一个更简单的选择语句,比如Vinko Vrsalovic建议的。
因为t1和t2实际上是复杂的查询。我只是为了SO而简化了。 – StackOverflowNewbie 2010-08-12 00:54:49
从所有的答案你看起来你过于简化:) – 2010-08-12 00:56:36