Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写一个SQL查询,对现有唯一ID的每个组合检索一行?_Sql - Fatal编程技术网

如何编写一个SQL查询,对现有唯一ID的每个组合检索一行?

如何编写一个SQL查询,对现有唯一ID的每个组合检索一行?,sql,Sql,如果已经有人问过这个问题,或者这是一个基本概念,我很抱歉——我对SQL的经验不足,不知道如何简洁地问这个问题(因此我在搜索它时运气不好) 请参阅下面第一段中每个表的第一行,了解我正在使用的表的概念。表1和表3可以有多行具有相同的table2Id 最初,我只是处理表1和表2。我为每个表1检索了一行,一切都很好。然而,我现在还需要从表3中检索数据——我能描述其含义的最好方法是使用以下示例: Table1: id table2Id otherData1 abc 123 "o

如果已经有人问过这个问题,或者这是一个基本概念,我很抱歉——我对SQL的经验不足,不知道如何简洁地问这个问题(因此我在搜索它时运气不好)

请参阅下面第一段中每个表的第一行,了解我正在使用的表的概念。表1和表3可以有多行具有相同的table2Id

最初,我只是处理表1和表2。我为每个表1检索了一行,一切都很好。然而,我现在还需要从表3中检索数据——我能描述其含义的最好方法是使用以下示例:

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

我想你会找到帮助,如果你搜索“笛卡尔加入”我还不能投票,但谢谢你!!