跨多个查询

时间:2015-09-10 20:17:06

标签: mysql join multi-query

如果我有多个查询,例如:

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>

编辑:我想要两个查询的结果。第二个查询需要在第一个查询的结果集上加入。

3 个答案:

答案 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

但在我看来非常奇怪。你的真正目标是什么?为什么?