【问题标题】:With SQL (mysql) Append the results of one sub-query to that of another使用 SQL (mysql) 将一个子查询的结果附加到另一个子查询的结果
【发布时间】:2017-05-29 09:51:15
【问题描述】:

我有两个 mysql 表。本质上,我想在一个 SQL 查询中组合两个查询(每个表一个)。似乎应该很容易(有点像内部联接)但是内部联接是将表 2 中的非唯一值复制到我的结果数组中...我不希望它们重复...我想要表/查询 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 和 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..
        )

【问题讨论】:

    标签: php mysql sql join


    【解决方案1】:

    尝试类似的方法,将表 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)
    

    【讨论】:

      【解决方案2】:

      组合结果是什么意思?

      您是否希望 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)
      

      【讨论】:

      • 是的,第一种情况。不是第二个。我希望对 table2 的第二个子查询的结果出现在与额外列相同的相关行中.....这就像将 extra_data2、pub_url2、extra_data3、pub_url3、extra_data4、pub_url4 添加到第一个表的结果中...... (但正如我提到的,JOIN 和 INNER JOIN 不起作用,因为它只是为 table2 的每个结果复制了表 1 的结果......
      • 对于每个sidtable1table2 中是否正好有一行?
      • no... 对于表一中的每个匹配 .sid 行,表 2 中可以有两个或三个或更多 .sid 匹配行。这就是我的问题。我只想为每个匹配的 sid 返回一行。因此,如果表 2 有 3 个匹配的行...我希望将这些行的列和结果添加到表中的一行
      • 向我们展示一些结果集应该是什么样子的示例。您希望如何将三行中的数据合二为一?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      • 1970-01-01
      • 2014-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多