我有一个运行良好的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'
如何编写查询以使其执行相同的操作但实际上会在结果中带回额外的字段?
答案 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:
第一个结果来自parts1
表parts2
,Name
中的第二个结果,空白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'