如何编写一个SQL查询,对现有唯一ID的每个组合检索一行?
如果已经有人问过这个问题,或者这是一个基本概念,我很抱歉——我对SQL的经验不足,不知道如何简洁地问这个问题(因此我在搜索它时运气不好) 请参阅下面第一段中每个表的第一行,了解我正在使用的表的概念。表1和表3可以有多行具有相同的table2Id 最初,我只是处理表1和表2。我为每个表1检索了一行,一切都很好。然而,我现在还需要从表3中检索数据——我能描述其含义的最好方法是使用以下示例:如何编写一个SQL查询,对现有唯一ID的每个组合检索一行?,sql,Sql,如果已经有人问过这个问题,或者这是一个基本概念,我很抱歉——我对SQL的经验不足,不知道如何简洁地问这个问题(因此我在搜索它时运气不好) 请参阅下面第一段中每个表的第一行,了解我正在使用的表的概念。表1和表3可以有多行具有相同的table2Id 最初,我只是处理表1和表2。我为每个表1检索了一行,一切都很好。然而,我现在还需要从表3中检索数据——我能描述其含义的最好方法是使用以下示例: Table1: id table2Id otherData1 abc 123 "o
Table1:
id table2Id otherData1
abc 123 "otherData"
def 123 "anotherData"
Table2:
id otherData2
123 "yetAnotherData"
Table3:
id table2Id otherData3
!@# 123 "thereCouldntBeMoreData"
$%^ 123 "iCantBelieveItsNotData"
要完全表示所有数据,我需要4行,一行用于abc+!@#,一个用于abc+$%^,一个用于def+!@,最后一个是def+$%^。如果我正确地描述了这一点,我的最终结果将是这样的:
comboId t1.id t2.id t3.id t1.otherData1 t2.otherData2 t3.otherData3
abc!@# abc 123 !@# "otherData" "yetAnotherData" "thereCouldn'tBeMoreData"
abc$%^ abc 123 $%^ "otherData" "yetAnotherData" "iCantBelieveItsNotData"
def!@# def 123 !@# "anotherData" "yetAnotherData" "thereCouldn'tBeMoreData"
def$%^ def 123 $%^ "anotherData" "yetAnotherData" "iCantBelieveItsNotData"
我怎样才能做到这一点?提前感谢您提供的任何帮助,即使它只是向我指出了其他人对类似问题的答案。这将得到您想要的结果,但我将首先说,它最多是黑客式的,没有主键和外键,我不太确定如何执行“文本书”加入行动
SELECT t1.id+''+t3.id comboId,t1.id t1ID, t2.id t2ID, t3.id t3ID, t1.otherData1, t2.otherData2, t3.otherData3
FROM table1 t1,table2 t2,table3 t3;
正如WW所说,您需要笛卡尔连接。幸运的是,这是SQL中的默认联接。但是,由于需要连接的列具有不同的名称,因此需要在子句上使用
;您应该尝试使您加入的列具有相同的名称
要创建comboId
您需要链接列;SQL Server中的语法是+
,Oracle中的语法是|
,我认为MySql中有一个Concat()
函数。每当你问一个关于SQL的问题时,总是告诉我们你使用的是哪种SQL
在SQL Server中,它将是:
SELECT t1.id+t3.id as comboId,
t1.id as 't1.Id',
t2.id as 't2.Id',
t3.id as 't3.Id',
t1.otherData1,
t2.otherData2,
t3.otherData3
FROM Table1 t1
JOIN Table2 t2 ON t2.id=t1.table2Id
JOIN Table3 t3 ON t3.table2Id=t2.id
我想你会找到帮助,如果你搜索“笛卡尔加入”我还不能投票,但谢谢你!!