繁体   English   中英

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

[英]using a select to find info from 2 tables that have similar columns

我有 2 个非常相似的表,它们都部分具有相同的列名(和数据类型),因此不必逐个 select 表,我想让它使第一个表的列变得与第二个表的列相同(就像如果他们有 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

这是我对 select 提出的请求的一个示例,两个表中的相同信息,我需要做 2 个不同的请求,我希望我可以融合它们

表 1(字符):

characterId accountId name

表2(项目):

characterId itemId maxUpgrade amount

表 3(银行项目):

accountId itemId maxUpgrade amount

结果:

accountId characterId name itemId maxUpgrade amount

但全部在 1 个请求中,因此无需输入WHERE c.name=两次

您可以在 CTE 中合并 items 和 bankItems 表,然后加入 CTE 上的字符表,例如使用 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;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM