Sql 子查询上的联接
我试图找到binnum的不同值。但是,我需要将origrec保留在select中,因为它是唯一的id。只要有一个origrec值绑定到不同的bin,origrec值是什么并不重要 我正在尝试在联接中执行此操作。然而,在执行子查询内部联接时,我似乎仍然获得了所有的值。我错在哪里?纠正这一点的最佳方法是什么 完整代码:Sql 子查询上的联接,sql,sql-server,join,Sql,Sql Server,Join,我试图找到binnum的不同值。但是,我需要将origrec保留在select中,因为它是唯一的id。只要有一个origrec值绑定到不同的bin,origrec值是什么并不重要 我正在尝试在联接中执行此操作。然而,在执行子查询内部联接时,我似乎仍然获得了所有的值。我错在哪里?纠正这一点的最佳方法是什么 完整代码: SELECT distinct d.BINNUM , d.LOCATIONNAME , d.LOCATIONTYPE , d.ORIGREC FROM DL
SELECT distinct d.BINNUM
, d.LOCATIONNAME
, d.LOCATIONTYPE
, d.ORIGREC
FROM DLOCATION D
inner join
(
SELECT distinct d1.binnum
FROM dlocation d1
GROUP BY d1.binnum
) as D1 On d.binnum = d1.binnum
第一个问题:
SELECT distinct d.BINNUM,d.LOCATIONNAME,d.LOCATIONTYPE,d.ORIGREC FROM DLOCATION D
将返回:
BINNUM LOCATIONNAME LOCATIONTYPE ORIGREC
1 Bruker RawMaterial 31
1 Bruker RawMaterial 32
200 WetChem RawMaterial 33
200 WetChem RawMaterial 34
555 WetChem RawMaterial 19
555 WetChem RawMaterial 21
555 WetChem RawMaterial 23
555 WetChem RawMaterial 30
998 WetChem RawMaterial 26
1002 Forage Cooler Forage 27
2008 XRF Press International 29
2009 Long Term International 28
第二个问题:
SELECT distinct d1.binnum FROM dlocation d1 GROUP BY d1.binnum
将返回:
BINNUM
1
200
555
998
1002
2008
2009
为什么内部联接仍然给出这两者之间的所有结果
BINNUM LOCATIONNAME LOCATIONTYPE ORIGREC
1 Bruker RawMaterial 31
1 Bruker RawMaterial 32
200 WetChem RawMaterial 33
200 WetChem RawMaterial 34
555 WetChem RawMaterial 19
555 WetChem RawMaterial 21
555 WetChem RawMaterial 23
555 WetChem RawMaterial 30
998 WetChem RawMaterial 26
1002 Forage Cooler Forage 27
2008 XRF Press International 29
2009 Long Term International 28
我如何才能只获取第二个查询中看到的BinNum值,使其看起来像这样
BINNUM LOCATIONNAME LOCATIONTYPE ORIGREC
1 Bruker RawMaterial 31
200 WetChem RawMaterial 33
555 WetChem RawMaterial 19
998 WetChem RawMaterial 26
1002 Forage Cooler Forage 27
2008 XRF Press International 29
2009 Long Term International 28
一些基本的聚合可以做到这一点。这里也不需要子查询。除非您有区分大小写的排序规则,否则DLOCATION和DLOCATION实际上是不同的表。假设你不是这样,这可以大大简化
SELECT d.BINNUM
, d.LOCATIONNAME
, d.LOCATIONTYPE
, MIN(d.ORIGREC)
FROM DLOCATION D
GROUP BY d.BINNUM
, d.LOCATIONNAME
, d.LOCATIONTYPE
取出原始列?查询中有distinct,这些行中的值不同。此外,在子查询中,您有distinct和group by。这是多余的。我需要上面描述的ORIGREC列。这是因为我在软件中工作,该软件要求本专栏始终存在。好的。那么在您的查询中,您想要哪一个?MIN,MAX?只要我能清楚地列出一个BINNUM和任何绑定到其中一个BINNUM的origrec,那就没关系了。您可以参考问题中显示的最后一个输出示例。它看起来似乎过于复杂了。谢谢你的澄清:)很高兴这对你有用。有时,只需要第二个人看一眼就可以了。:)