如果我有多个查询,例如:
SELECT * FROM my_database.`table` AS one
WHERE one.some_field LIKE 'abc';
SELECT * FROM my_database.`table` AS two
JOIN one
ON one.id = two.relatedId;
是。那些是相同的表,它们应该是。当然,它要复杂得多,但这个例子可以说明问题。
然后我得到一个错误(使用PHP和PDO),如:
找不到基表或视图:1146表' my_database.one'不存在
我可以通过以下方式规避这个错误:
CREATE TEMPORARY TABLE one AS
(SELECT * FROM table AS one);
CREATE TEMPORARY TABLE two AS
(SELECT * FROM table AS two
JOIN one
ON one.id = two.relatedId
);
SELECT * FROM one;
SELECT * FROM two;
DROP TEMPORARY TABLE one;
DROP TEMPORARY TABLE two;
我尝试在第一个查询和第二个查询之间使用UNION,使其成为单个查询,但得到了相同的错误。而且我也不想使用UNION。
是否还有其他方法可以在流程中明确创建临时表?
注意:JOIN
子查询并不是真的可以接受,因为那时我必须写两次相同的查询,一次用于选择,一次用于加入。< / p>
编辑:我想要两个查询的结果。第二个查询需要在第一个查询的结果集上加入。
答案 0 :(得分:0)
不确定你到底想要做什么,你说加入子查询是不可接受的,但我担心我不理解上下文但是这个:
SELECT
*
FROM
(
SELECT * FROM my_database.`table`
WHERE some_field LIKE 'abc'
) AS `one`
my_database.`table` AS two
WHERE
one.id = two.relatedId;
对于您的具体问题,可能会有一个更优雅的解决方案,但没有更多细节,很难说。
正如Gordon在上面的评论中所说,你也可以简单地加入表两次而不使用子查询,并将两个表的条件放在where子句中但是再次没有更多的上下文我不确定你要尝试什么做。
SELECT
*
FROM
my_database.`table` AS `one`,
my_database.`table` AS two
WHERE
one.some_field LIKE 'abc'
AND one.id = two.relatedId;
答案 1 :(得分:0)
在你必须指定表格的地方(一两个)
SELECT one.*,two.* FROM my_database.`table` one
LEFT JOIN my_database.`table` two
ON one.id = two.relatedId
WHERE one.some_field LIKE 'abc';
答案 2 :(得分:0)
获得所需结果的最简单方法是:
SELECT *
FROM my_database.`table` two
JOIN (
SELECT *
FROM my_database.`table`
WHERE one.some_field LIKE 'abc';
) one
ON one.id = two.relatedId
但在我看来非常奇怪。你的真正目标是什么?为什么?