MySQL:子查询返回超过1行
我知道这已经被问了很多次了,但是我找不到一个和我的答案相近的答案 我有以下疑问:MySQL:子查询返回超过1行,mysql,sql,select,subquery,Mysql,Sql,Select,Subquery,我知道这已经被问了很多次了,但是我找不到一个和我的答案相近的答案 我有以下疑问: 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.user
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)
我想做的是获取案例,在案例中定义的站点ID也出现在db_sites sites表中,与我想过滤的组织ID一起出现在db_sites sites表中,正如“organization_ID='111'”所定义的那样,但我得到了问题中所述的MySQL的响应
我希望这是有意义的,我将感谢任何帮助这一点
谢谢。因为错误说明您的子查询返回的行多于一行,在这种情况下无法执行。如果这不是预期的结果,你真的应该调查为什么会发生这种情况。但是如果您知道会发生这种情况,并且只需要第一个结果,请使用
LIMIT 1
将结果限制为一行
SELECT organisation_name
FROM db_sites s, db_cases c
WHERE organisation_ID = '111'
LIMIT 1
问题是,很明显,您的子查询返回多个行,当将其用作标量子查询(如WHERE子句中的=运算符)时,这些行无效 相反,您可以对子查询执行内部联接,该联接将只筛选与on子句匹配的行。这将获得所有匹配的行,即使子查询中返回了多行 更新: 您可能会从子查询中获得多行,因为您正在对db_sites和db_cases表进行交叉连接。在WHERE子句中,您使用的是旧式的联接语法,但没有限定任何谓词来联接表。出于这个原因,不建议使用这种连接表的旧样式。如果您明确说明它是什么类型的联接,以及应该如何联接表,那就更好了 关于连接的好页面: (对于正确的语法)
(关于连接类型之间的差异)我花了一个小时来讨论这个问题,并将其完全复杂化。有时,快速休息并在在线论坛上写下来可以帮你解决问题;) 这是应该的查询
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)
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