SQL UNION - 是否可以在第二个SELECT中使用第一个SELECT的结果

时间:2016-09-09 13:39:51

标签: sql sql-server

我正在连接到具有多个表的SQL服务器

作为一个例子,假设有2个表:

  1. 将ID与产品名称链接的表格(名称),例如5, apple12,eggs
  2. 将产品名称与价格相关联的表格(价格),例如apple, $4eggs, $5oranges, $12
  3. 我想编写一个select命令,可以将这些数据链接在一起,类似于:

    SELECT id, name 
    FROM names 
    UNION 
    SELECT price 
    FROM prices where name = **name from the first bit**
    

    返回的结果如下:

    5, apple, $4
    12, eggs, $5
    

    橘子不会被退回,因为它不在名单表中。

    有一点背景知识:我最初的计划是首先获取名称然后遍历它们,为每个名称创建一个新查询以获得价格。

    然而,这将使用C#实现,如果当前在同一连接上,Visual Studio将不允许打开第​​二个查询

    更改为类似于我上面概述的方法似乎是实现我想要的更好的方式(更少查询,更整洁等),但欢迎其他建议

2 个答案:

答案 0 :(得分:3)

这是一个JOIN,而不是UNION

$arrContextOptions["http"] = array(
    "method" => "DELETE",
    "header" => "Authorization: Basic NGEwMGZmMjItY2NkNy0xMWUzLTk5ZDUtMDAwYzI5NDBlNjJj\r\nContent-type: application/json",
    "content" => "",
    "ignore_errors" => true
);

$response = file_get_contents("https://onesignal.com/api/v1/notifications/{notificationId}?app_id={appId}", false, stream_context_create($arrContextOptions)));

答案 1 :(得分:1)

UNION将两个或多个查询的结果合并到一个结果集中,该结果集包含属于联合中所有查询的所有行。并且您需要INNER JOIN来组合来自两个(或更多)表的记录:

SELECT  n.id, 
        n.name, 
        p.price 
FROM names n
INNER JOIN prices p
    ON n.name = p.name --or id