0

我知道这已经被问过很多次了,但我找不到一个接近我的答案。

我有以下查询:

SELECT c.cases_ID, c.cases_status, c.cases_title, ci.custinfo_FName, ci.custinfo_LName, c.cases_timestamp, o.organisation_name 
FROM db_cases c, db_custinfo ci, db_organisation o 
WHERE c.userInfo_ID = ci.userinfo_ID AND c.cases_status = '2' 
AND organisation_name = (
    SELECT organisation_name 
    FROM db_sites s, db_cases c 
    WHERE organisation_ID = '111'
)
AND s.sites_site_ID = c.sites_site_ID)

我想要做的是获取案例,其中在案例中定义的sites_site_ID也出现在db_sites站点表中,旁边是我想要按照“organisation_ID ='111'”定义的组织ID进行过滤,但我如问题中所述,我得到了 MySQL 的响应。

我希望这是有道理的,我将不胜感激任何帮助。

谢谢。

4

4 回答 4

0
Let me re-write what you have post:

SELECT 
    c.cases_ID, c.cases_status, c.cases_title, ci.custinfo_FName, ci.custinfo_LName, 
    c.cases_timestamp, c.sites_site_ID 
FROM
    db_cases c
JOIN   
    db_custinfo ci ON c.userInfo_ID = ci.userinfo_ID and c.cases_status = '2'
JOIN   
    db_sites s ON s.sites_site_ID = c.sites_site_ID and s.organization_ID = 111
于 2013-11-13T03:54:00.373 回答
0

正如错误所述,您的子查询返回多于一行,在这种情况下它无法执行。如果这不是预期的结果,您真的应该调查为什么会发生这种情况。但是,如果您知道这会发生并且只希望使用第一个结果LIMIT 1来将结果限制为一行。

SELECT organisation_name 
FROM db_sites s, db_cases c 
WHERE organisation_ID = '111'
LIMIT 1
于 2013-11-13T03:12:52.097 回答
0

那么问题显然是,您的子查询返回不止一行,当将其用作标量子查询时(例如在 WHERE 子句中使用 = 运算符),这是无效的。

相反,您可以对子查询进行内部联接,这会将您的结果过滤到仅与 ON 子句匹配的行。这将为您提供所有匹配的行,即使子查询中返回的行不止一个。

更新:您可能会从子查询中获得不止一行,因为您正在对 db_sites 和 db_cases 表进行交叉连接。您使用的是旧式连接语法,然后没有限定任何谓词来连接 WHERE 子句中的表。出于这个原因,不建议使用这种旧式的连接表。如果您明确说明它是哪种联接以及应如何联接表,那就更好了。

关于连接的好页面:http: //dev.mysql.com/doc/refman/5.0/en/join.html(正确的语法) http://www.codinghorror.com/blog/2007/10/a- visual-explanation-of-sql-joins.html(用于连接类型之间的差异)

于 2013-11-13T03:15:32.907 回答
0

我为此奋斗了一个小时,完全把它复杂化了。有时,快速休息一下并在在线论坛上写出来可以为您解决问题;)

这是应该的查询。

SELECT c.cases_ID, c.cases_status, c.cases_title, ci.custinfo_FName, ci.custinfo_LName, c.cases_timestamp, c.sites_site_ID 
FROM db_cases c, db_custinfo ci, db_sites s 
WHERE c.userInfo_ID = ci.userinfo_ID AND c.cases_status = '2' AND (s.organisation_ID = '111' AND s.sites_site_ID = c.sites_site_ID)
于 2013-11-13T03:16:36.100 回答