使用select从具有类似列的两个表中查找信息

kpbwa7wx  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(254)

我有两个非常相似的表,它们部分都有相同的列名(和数据类型),所以我不必按1选择表1,而是希望使第一个表的列与第二个表的列相同(因此,如果它们有4个同名列,而不是选择后有8个列,它只显示3个)

JOIN items i ON i.characterId=c.characterId
WHERE i.itemId=18011

SELECT c.accountId,c.characterId,c.name,b.itemId,b.maxUpgrade,b.amount FROM characters c
JOIN bankItems b ON b.accountId=c.accountId
WHERE b.itemId=18011

下面是一个请求的例子,我从两个表中选择相同的信息,我需要做两个不同的请求,我希望我可以融合他们
表1(字符):

characterId accountId name

表2(项目):

characterId itemId maxUpgrade amount

表3(银行项目):

accountId itemId maxUpgrade amount

结果是:

accountId characterId name itemId maxUpgrade amount

但都在一个请求中,所以不需要键入 WHERE c.name= 两次

hs1rzwqc

hs1rzwqc1#

您可以在cte中对items和bankitems表进行并集,然后将cte上的characters表连接起来,例如使用accountid或characterid:

;WITH CTE AS (
    SELECT itemId, NULL AS characterId, accountId, maxUpgrade, amount
    FROM bankItems
    UNION
    SELECT itemId, characterId, NULL AS accountId, maxUpgrade, amount
    FROM items
)
SELECT
    c.accountId,
    c.characterId,
    c.name,
    b.itemId,
    b.maxUpgrade,
    b.amount
FROM characters c
    JOIN CTE b ON
        b.accountId = c.accountId
        OR b.characterId = c.characterId
WHERE b.itemId = 18011;

考虑到表结构,这个带有可选字段的解决方案应该是可行的。

相关问题