SQL:使用值匹配的多个条件连接表中的数据

SQL:使用值匹配的多个条件连接表中的数据,sql,oracle,Sql,Oracle,表1有POS、ID、NAME和TYPE列 我一直在运行一个标准查询 SELECT POS, NAME FROM Table1 WHERE ID = 100 AND TYPE LIKE '%someType%' ORDER BY POS ASC 表2有POS、ID、VALUE和ROLE列 SELECT POS, VALUE FROM Table2 WHERE IS = 100 AND ROLE LIKE '%someType%' ORDER BY POS ASC 我想将这两种方法结合起来,以返

表1有POS、ID、NAME和TYPE列 我一直在运行一个标准查询

SELECT POS, NAME FROM Table1 WHERE ID = 100 AND TYPE LIKE '%someType%' ORDER BY POS ASC
表2有POS、ID、VALUE和ROLE列

SELECT POS, VALUE FROM Table2 WHERE IS = 100 AND ROLE LIKE '%someType%' ORDER BY POS ASC
我想将这两种方法结合起来,以返回一个包含3列的记录集;POS、表1.NAME和表2.VALUE。。。无论我如何尝试内部联接,我总是得到比我应该得到的更多的行。另外,如果表中的对应值不存在,我希望它返回null或其他值,这样记录集本质上可以是这样的

POS    NAME    VALUE
1      A       DF1
2      B       DF1
3      C       DF2
4      C       null
5      null    DF3
etc...

这可能吗?

您似乎在寻找一个简单的连接。比如:

select t1.pos, t1.name, t2.value
from table1 t1
inner join table2 t2 
    on  t2.pos = t1.pos 
    and t2.is = t1.id
    and t2.role like '%someType%'
where
    t1.type like '%someType%'
    and t1.id = 100
order by t1.pos
请注意,如果一个或两个原始查询返回多行,您将在结果集中得到这些查询的笛卡尔乘积

或者,如果希望允许来自两个表的行,即使另一个表中没有匹配项,也可以
完全外部联接
两个查询,如:

select coalesce(t1.pos, t2.pos) pos, t1.name, t2.value
from (
    select pos, name from table1 where id = 100 and type like '%someType%'
) t1
full outer join (
    select pos, value from table2 where is = 100 and role like '%someType%'
) t2
on t1.pos = t2.pos
order by coalesce(t1.pos, t2.pos)

如果两个查询中的一个返回多行,您希望如何处理它?我认为如果它返回多行就可以了;也许我可以根据其他标准来订购。因此,位置1可能有2或3行(我根据位置值在脚本中使用这些值)。向我们展示您尝试过的组合查询。因此,如果它返回多行,我可以将它们作为单独的行处理,但如果表1或表2中的匹配值丢失,它不会返回该行。。。我希望它返回4-C-null(或类似的内容),这样即使名称值不存在,我也可以访问名称值(反之亦然)。@trishia42:听起来像是一个完整的外部连接。我更新了我的答案,效果非常好!但如果你不介意的话,我还有最后一个问题;对于您的第一个答案,如果给定位置有多行,我可以在ORDER子句中添加“t1.ID”,这样它就可以使用表1中的附加列对它们进行排序;有没有办法将其添加到第二个答案中?将其添加到order子句不会返回任何内容。@trishia42:order by子句不会筛选出记录。。。我想你想要
orderbycoalesce(t1.id,t2.id)
,或者可能
orderbyt1.id,t2.id)
@trishia42:我只能回答你最初问的问题。如果你相信我的回答解决了你的问题,请。如果您还有其他问题,那么您可能希望创建一个新问题,提供真正说明您的问题的示例数据和预期结果。