0

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

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在子查询上 ing 是不可接受的,从那时起我必须编写相同的查询两次,一次用于选择它,一次用于加入它。

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

4

3 回答 3

0

不确定您到底要做什么,并且您说 JOINing 子查询是不可接受的,但恐怕我不了解上下文,但这又如何:

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;
于 2015-09-10T20:27:16.830 回答
0

在 Where you must specify the Table (一个或两个)

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';
于 2015-09-10T20:30:28.110 回答
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

但在我看来,这很奇怪。你真正的目标是什么,为什么?

于 2015-09-10T20:46:14.957 回答