使用SQL(mysql)将一个子查询的结果附加到另一个子查询的结果

时间:2017-01-13 22:36:31

标签: php mysql sql join

我有两个mysql表。基本上我想在一个SQL查询中组合两个查询(每个表一个)。好像它应该很容易(有点像内部Join)但是内连接是将表2中的非uniqe值重复到我的结果数组中...我不希望它们重复...我想要从表/查询2重复这些合并到 query1

的结果记录中

查询1从表1中获取记录。结果是唯一的。 (一个ID返回一个记录)它只是返回ID等于我的一个条件的记录上的所有字段。 [我使用IN而不是一堆OR)

$sid = "'M-179','M-242','M-231','Q-2thru5'" ; 
$query = "SELECT * FROM table1 WHERE IN ($sid)`

查询2从表2中获取记录。但结果不是唯一的。一个ID可以返回许多记录。

$query2 = "SELECT extra_data, pub_url FROM table2 WHERE IN ($sid)";

所以我想要每个extra_data&来自ALL返回记录的pub_url字段刚刚打到查询1结果的末尾。我有道理吗?所以结果看起来像这样......

[0] => Array
        (
            * all my returned fields from the 
             record returned by query 1 here
            $row['extra_data']  
            $row['pub_url']  <-returned record from query 2
            $row['extra_data'] 
            $row['pub_url']  <-another returned record from query 2
            $row['extra_data'] 
            $row['pub_url']  <-any another returned 
                              record from query 2, etc..
        )

2 个答案:

答案 0 :(得分:0)

结合结果是什么意思?

您是否希望query2的结果显示在同一个结果中 相关的行,但只是额外的列,或者你想要它们 显示为新行。

对于第一种情况,您必须使用JOIN

但我觉得你想要做的就是第二个 案件。在这种情况下,您必须使用UNION。但请注意, 在这种情况下,两个查询的列必须匹配。所以 两个查询的联合看起来像这样:

-- pseudo code only
SELECT extra_data, pub_url FROM table1 WHERE IN ($sid)
union
SELECT extra_data, pub_url FROM table2 WHERE IN ($sid)

答案 1 :(得分:0)

尝试类似的内容,将表1的结果连接到包含sid值的列的表2。

SELECT a.*, b.extra_data, pub_url
FROM table1 a
left outer join table2 b on a.sid = b.sid 
WHERE a.sid IN ($sid)