我的问题是什么:
当我不期待的时候,我会不断回归多重价值观。我试图获得一个由州,县和国家决定的特定气候。
我尝试了什么:
下面给出的代码。我不确定具体是什么问题。我知道它正在返回多个值。但为什么?我指定STATE_ABBREVIATION = PROV_TERR_STATE_LOC
以及我所做的inner join
,除了不同的CLIMATE_ID之外,不应该创建相似的行吗?
SELECT
...<code>...
(SELECT locations.CLIMATE_ID
FROM REF_CLIMATE_LOCATION locations, SED_BANK_TST.dbo.STATIONS stations
INNER JOIN REF_STATE states ON STATE_ID = states.STATE_ID
INNER JOIN REF_COUNTY counties ON COUNTY_ID = counties.COUNTY_ID
INNER JOIN REF_COUNTRY countries ON COUNTRY_ID = countries.COUNTRY_ID
WHERE STATE_ABBREVIATION = PROV_TERR_STATE_LOC) AS CLIMATE_ID
...<more code>...
FROM SED_BANK_TST.dbo.STATIONS stations
我已经在这里工作了几个小时,在SO上查找不同的问题,但我无法弄清楚如何使这个子查询返回单个值。
答案 0 :(得分:1)
如果您正在测试的ID存在于REF表中,则所有这些内部联接都不会减少结果集。除此之外,您在位置和工作站之间进行笛卡尔积(由于where子句,这可能是旧式的内部连接)。
如果在位置表中只有一行与站表中的一行匹配,那么在STATE_ABBREVIATION = PROV_TERR_STATE_LOC
的条件下,您将只获得一行答案 1 :(得分:0)
您的JOIN显示位置层次结构:Country-&gt; State-&gt; County,但您的WHERE子句仅受州缩写的限制。通过加入该县,您将获得该州每个县的一条记录。你可以通过获得结果的TOP 1来限制你的结果,但是你需要非常小心,这才是你想要的。如果您正在寻找特定的县,则需要在WHERE子句中包含该县。您可以通过TOP 1获得一些控制权,因为它将根据ORDER BY子句给出前1名。即,如果您想要最近添加的内容,请使用:
SELECT TOP 1 [whatever] ORDER BY [DateCreated] DESC;
对于子查询,您可以执行以下操作:
SELECT TOP 1
locations.CLIMATE_ID
FROM REF_CLIMATE_LOCATION locations ,
SED_BANK_TST.dbo.STATIONS stations
INNER JOIN REF_STATE states ON STATE_ID = states.STATE_ID
INNER JOIN REF_COUNTY counties ON COUNTY_ID = counties.COUNTY_ID
INNER JOIN REF_COUNTRY countries ON COUNTRY_ID = countries.COUNTRY_ID
WHERE STATE_ABBREVIATION = PROV_TERR_STATE_LOC
请务必在最后添加ORDER BY,或者根据表格中的“自然顺序”选择TOP 1。
答案 2 :(得分:0)
如果您希望子查询中包含单个值,则可能需要使用GET 'https://XYZ.firebaseio.com/user/<RFID ID>/balance.json?auth=verysecrettoken'
。查看它的最佳方法是单独运行子查询并查看结果。如果您需要在您使用的表中包含其他列,您可以这样做以检查结果有多行的原因。
您还可以使用DISTINCT
或MAX()
或MIN()
获取子查询的单个值,但这取决于您希望为{{1}创建的逻辑}。您需要回答这个问题,&#34;它与检索到的其他列有什么关系?&#34;