如何请求2请求SQL?

时间:2014-11-09 15:20:04

标签: php mysql join request

我在使用两个SQL请求进行JOIN时遇到了一些问题

请求1:

SELECT *
FROM `tableA` 
INNER JOIN tableB
ON tableA.products_id=tableB.products_id
LEFT JOIN tableC
ON tableB.products_id=tableC.products_id
LEFT JOIN tableD AS CD
ON CD.categories_id=tableC.categories_id
WHERE orders_id >=80000 AND orders_id <=80010 GROUP BY orders_id

请求2:

SELECT *     
FROM `tableA` AS OP
LEFT JOIN tableE AS PTP
ON OP.products_id=PTP.products_id

LEFT JOIN tableD AS CD
ON PTP.categories_id=CD.categories_id

WHERE  orders_id >=80000 AND orders_id <=80010 GROUP BY orders_id

这两个请求只能做一个请求吗?或者这是不可能的? 感谢您提供的任何帮助

2 个答案:

答案 0 :(得分:1)

当您从同一个表中选择相同的列时,可以使用Union。 你甚至可以通过外部sql中的orders_id进行分组:

(SELECT a FROM t1 WHERE a=10 AND B=1)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2)
GROUP BY orders_id

但是在PHP中,一个请求不能进行2次查询,你必须形成你的sql-query

答案 1 :(得分:1)

我无法得到您想要做的事情,但我的猜测是您想要将tableE(PTP)中的数据包含在您的第一个查询中。在这种情况下,您可以这样做:

        SELECT 
             *
        FROM 
            `tableA` 
        INNER JOIN 
            `tableB` ON (`tableA`.`products_id` = `tableB`.`products_id`)
        LEFT JOIN 
            `tableE` AS `PTP` ON (`tableA`.`products_id` = `PTP`.`products_id`)
        LEFT JOIN 
            `tableC` ON (`tableB`.`products_id` = `tableC`.`products_id`)
        LEFT JOIN 
            `tableD` AS `CD` ON (`CD`.`categories_id` = `tableC`.`categories_id` OR `PTP`.`categories_id` = `CD`.`categories_id`)
        WHERE 
                `orders_id` >= 80000 
            AND 
                `orders_id` <= 80010 
        GROUP BY 
            `orders_id`