结果中带有额外字段的SQL UNION查询

时间:2011-05-01 02:41:48

标签: sql select union field

我有一个运行良好的SQL查询,除了我想在第一个数据库中带来另一列的结果。这就是我目前所拥有的:

SELECT parts1.PART_NBR, parts1.NIIN
FROM parts1
WHERE parts1.PART_NBR='$pn'
UNION
SELECT parts2.REFERENCE_NUMBER, parts2.NIIN
FROM parts2
WHERE parts2.REFERENCE_NUMBER='$pn'

这是我基本上想要的(当然这不会起作用):

SELECT parts1.PART_NBR, parts1.NIIN, parts1.ANOTHER_FIELD
FROM parts1
WHERE parts1.PART_NBR='$pn'
UNION
SELECT parts2.REFERENCE_NUMBER, parts2.NIIN
FROM parts2
WHERE parts2.REFERENCE_NUMBER='$pn'

如何编写查询以使其执行相同的操作但实际上会在结果中带回额外的字段?

4 个答案:

答案 0 :(得分:5)

创建一个空字段,返回NULL

SELECT parts1.PART_NBR, parts1.NIIN, parts1.ANOTHER_FIELD
FROM parts1
WHERE parts1.PART_NBR='$pn'
UNION ALL
SELECT parts2.REFERENCE_NUMBER, parts2.NIIN, NULL AS ANOTHER_FIELD
FROM parts2
WHERE parts2.REFERENCE_NUMBER='$pn'

修改 根据您的评论,您将结果视为

Part Number: 21223 NIIN: 008194914 Name: CAPACITOR
Part Number: 21223 NIIN: 011241926 Name: HEAT SINK
Part Number: 21223 NIIN: 003901600 Name: KNIFE
Part Number: 21223 NIIN: 003901600 Name: 
Part Number: 21223 NIIN: 008194914 Name:
Part Number: 21223 NIIN: 011241926 Name:

第一个结果来自parts1parts2Name中的第二个结果,空白NULL字段是您返回UNION的位置。

根据您提供的信息,我不明白为什么您使用Name从这两个表中获取结果,因为它们似乎包含相同的信息,除了第一个表还有{{1 }} field。

为了选择名称,JOIN部件/参考编号上的表格会不会更好?

修改 正如您在评论中所述,之前您因使用DISTINCT而获得UNION结果集。使用NULL字段,行不再是唯一的,查询将返回所有行。

我在评论中说,我看不出当前的UNION声明对你做了什么,因为看起来同样的信息都是表格。这个查询还有什么比你告诉我们的更多吗?

答案 1 :(得分:2)

SELECT parts.PART_NBR, parts.NIIN, parts1.ANOTHER_FIELD
FROM  (
        SELECT parts1.PART_NBR, parts1.NIIN
        FROM parts1
        WHERE parts1.PART_NBR = '$pn'
        UNION
        SELECT parts2.REFERENCE_NUMBER, parts2.NIIN
        FROM parts2
        WHERE parts2.REFERENCE_NUMBER =  '$pn'
      ) AS parts(PART_NBR, NIIN)
  LEFT OUTER JOIN parts1
    ON parts.PART_NBR = parts1.PART_NBR AND
       parts.NIIN = parts1.NIIN      

答案 2 :(得分:0)

简单如下:

select part_number, niin, max(field)
from (     
    SELECT parts1.PART_NBR part_number, parts1.NIIN niin, parts1.ANOTHER_FIELD field
    FROM parts1
    WHERE parts1.PART_NBR='$pn'
    UNION
    SELECT parts2.REFERENCE_NUMBER part_number, parts2.NIIN niin, "" field
    FROM parts2
    WHERE parts2.REFERENCE_NUMBER='$pn')
group by part_number, niin

您只需在第二个查询中容纳占位符以匹配第一个查询的额外字段位置。

答案 3 :(得分:0)

您必须有匹配的列,但是您可以在第二个列中放置一个“假”列null或您想要的任何默认值。

SELECT parts1.PART_NBR, parts1.NIIN, parts1.ANOTHER_FIELD
FROM parts1
WHERE parts1.PART_NBR='$pn'
UNION
SELECT parts2.REFERENCE_NUMBER, parts2.NIIN, NULL AS ANOTHER_FIELD
FROM parts2
WHERE parts2.REFERENCE_NUMBER='$pn'