回答

收藏

只有列值SQL查询

技术问答 技术问答 272 人阅读 | 0 人回复 | 2023-09-14

我的目标是编写查询。我有三张表,A,B和C。这些表的写法是A.bID = B.bID和B.cID =
% P+ W4 A4 l% r" Y& I! {+ ^C.cID。基本上,这让我可以从记录中编写查询a链接到b,然后将b记录链接到c记录。到目前为止,还不错,查询简单。% g7 x4 ?  o5 X& ]. D5 t8 V# |
我的问题是…查询中包含的列之一(我们称之为C.col3)必须有唯一的值;列中的值只能在查询结果中显示一次,但表中的其他列没有此要求。
( Q; R% z$ Y6 Z7 V) u) Q有人能帮我写这个查询吗?' D( ?6 @7 L0 Q3 D: l0 O5 m
谢谢…
. b8 a5 q% v' J6 G! r+ p更新1:
; R! ], Q( g4 a! L0 h这是表的布局(对不起,我必须用通用名)1 ?- L7 b+ o: W1 |* f6 d  Q
表A
- g) {+ Z7 }1 V- n6 w# uaID,bID,aCol1,aCol2,aCol3 … aCol10
; e0 ]' U4 j- ~! d表B9 G! ^, \- e/ }1 W/ }" Q# _
bID,cID,bCol1,bCol2,bCol3 … bCol10
6 Q! n+ V4 R5 n* N表C6 c+ R8 d/ S  g2 E* x
cID,cCol1,cCol2,    col3    ,cCol4 … cCol10
* H+ u; O& s4 F在col3.如果没有唯一的价值约束,我会这样编写查询:; Z0 @" w( b" J9 G+ I/ R' U
SELECT    A.aID,A.bID,A.aCol1 ... A.aCol10,   B.bID,B.cID,B.bCol1 ... B.bCol10,   C.cID,C.cCol1,C.cCol2,C.col3 ... C.cCol10FROM    A,B,CWHERE     A.bID = B.bID AND B.cID = C.cID…但当然不能保证C.col3中的值是唯一的。# O7 i8 c6 w! ], |
更新2:    更多信息…. i. g6 e0 L& C( Q5 D
表A和表B表A和表B有一对多的关系。A是标题,B是项目。' ]9 O- L; V2 N  Y  o% l/ y
表B和表C有一对一的关系。
. Z3 ^* p  {  }! d0 E$ x& n) n7 W这些表是缓存机制的一部分,所以很多数据看起来很相似,但在某些列中仍然不同。/ [$ p" x) \! S% m( F: Y3 j
由于A是标头,所以大部分重复值都可以在A中找到。   ^4 X6 I, D5 K* {$ N
我需要先按A.aID对行进行排序,但之后,我只需要回到第一行,C.col该列的最后一行没有出现3的值。
' P$ n" `/ J* J0 y/ N这会让事情变得更清楚吗,还是我还没有任何意义?   
# m- j- N$ u- F/ O- Z5 i最终更新:        + [9 F% g0 c, I8 Y  ]% O
我选择了Bartosz Klimek答案,因为这是我需要的最接近的答案。我只需要在中间修改嵌套join子句。
) P, F, p. b; i9 I谢谢大家的帮助!
6 a$ t( \- g5 U# ~8 P% N+ n# W                                                               
% s( A& j* W" K9 w- G" G    解决方案:                                                                ; K7 T1 \6 Z1 N1 w3 E' g9 d
                                                                SELECT A.*,B.*,C.*  FROM C    JOIN B ON B.cID = C.cID    JOIN A ON A.bID = B.bID    JOIN    (     SELECT id = min(aID)        FROM C          JOIN B ON B.cID = C.cID          JOIN A ON A.bID = B.bID        GROUP BY col3    ) D ON D.id = A.aID请注意,最后的子查询可以确保每个子查询col3值,最终结果最多有一个记录。所选记录最小aID记录。显然,我假设aID,bID和cID分别是A,B和C的主键。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则