无法使用和(&;)使用PHP和mysql获取记录
我有下面的查询,我想使用where子句显示满足条件的特定记录 以下是查询无法使用和(&;)使用PHP和mysql获取记录,mysql,Mysql,我有下面的查询,我想使用where子句显示满足条件的特定记录 以下是查询 select basic_information.*, service_history.*, inland_ic_information.* from service_history INNER JOIN basic_information ON service_history.pNo=basic_information.pNo INNER JOIN inland_ic_information ON servic
select basic_information.*, service_history.*, inland_ic_information.*
from service_history
INNER JOIN basic_information
ON service_history.pNo=basic_information.pNo
INNER JOIN inland_ic_information
ON service_history.pNo=inland_ic_information.pNo
WHERE service_history.pNo = '4301587'
and inland_ic_information.inlandcourseDescription ='A'
and inland_ic_information.inlandcourseDescription ='B'
上面的查询返回零行
当我使用单一条件时,如
WHERE service_history.pNo = '4301587' and inland_ic_information.inlandcourseDescription ='A'
或
它返回行
但当我同时使用这两个条件时,它返回零行
需要您的帮助听起来您想输出
pNo
值的所有行,其中pNo
与inlandcourseDescription
值同时为a
和B
的行相关联。您可以使用此查询执行此操作:
select basic_information.*,
service_history.*,
inland_ic_information.*
from service_history
INNER JOIN basic_information ON service_history.pNo=basic_information.pNo
INNER JOIN inland_ic_information ON service_history.pNo=inland_ic_information.pNo
WHERE service_history.pNo = '4301587'
AND (inland_ic_information.inlandcourseDescription = 'A'
AND EXISTS (SELECT *
FROM inland_ic_information
WHERE pNo = '4301587'
AND inlandcourseDescription = 'B')
OR inland_ic_information.inlandcourseDescription = 'B'
AND EXISTS (SELECT *
FROM inland_ic_information
WHERE pNo = '4301587'
AND inlandcourseDescription = 'A')
)
第一个查询的where条件使其结果为0
and inland_ic_information.inlandcourseDescription ='A'
and inland_ic_information.inlandcourseDescription ='B'
您可以通过以下方式获得结果:
WHERE service_history.pNo = '4301587'
AND
(
inland_ic_information.inlandcourseDescription ='A'
OR
inland_ic_information.inlandcourseDescription ='B'
)
SELECT *
FROM service_history A
INNER JOIN basic_information B
ON A.pNo=B.pNo
LEFT JOIN inland_ic_information C
ON A.pNo=C.pNo AND C.inlandcourseDescription ='A'
LEFT JOIN inland_ic_information D
ON A.pNo=D.pNo AND D.inlandcourseDescription ='B'
WHERE A.pNo = '4301587'
GROUP BY A.pNo
HAVING C.inlandcourseDescription IS NOT NULL
AND D.inlandcourseDescription IS NOT NULL
也许您可以在
inland_ic_information
表中执行两次LEFT JOIN
,如下所示:
WHERE service_history.pNo = '4301587'
AND
(
inland_ic_information.inlandcourseDescription ='A'
OR
inland_ic_information.inlandcourseDescription ='B'
)
SELECT *
FROM service_history A
INNER JOIN basic_information B
ON A.pNo=B.pNo
LEFT JOIN inland_ic_information C
ON A.pNo=C.pNo AND C.inlandcourseDescription ='A'
LEFT JOIN inland_ic_information D
ON A.pNo=D.pNo AND D.inlandcourseDescription ='B'
WHERE A.pNo = '4301587'
GROUP BY A.pNo
HAVING C.inlandcourseDescription IS NOT NULL
AND D.inlandcourseDescription IS NOT NULL
感谢您的回答,我需要pNo='4301587'符合我需要的课程'A'和'B'的行,条件不符合,或者在('A','B')中返回行,无论他是否符合课程A或B,但我需要检查这两个课程。我不确定我是否理解。您想要的行具有
pNo='4301587'
,但仅当具有InlandCoursedDescription='A'
和InlandCoursedDescription='B'
的行存在时?是的,我想要的行具有pNo='4301587',InlandCoursedDescription='A'和InlandCoursedDescription='B',但一行不能同时具有这两个值,它只能是A
或B
,不能同时在我的数据库表上,同一个pNo='4301587'有两行,他们同时完成了InlandCoursedDescription='A'和InlandCoursedDescription='B'谢谢你的回答,我需要pNo='4301587'符合我需要的课程'A'和'B'的条件的行('A','B')返回行,无论他是否符合课程A或B,但我需要检查两个课程。如果没有结果,则返回FALSE。“a”和“B”都有一个结果,为什么它返回false?您能发布模式和一些示例值吗?查看下面的评论/答案。如何在此处发布架构?问题和剪切粘贴。其中一个答案解决了你的问题吗?如果没有,你能提供更多的信息来帮助回答这个问题吗?否则,请考虑将最能解决你的问题的答案标记为(在上/下投票箭头下的复选标记)。看见