【发布时间】:2017-07-31 08:14:21
【问题描述】:
我需要与 where 进行有条件的内部连接。
我有一个包含三个特定领域的评估表:国家、学位和学科。
还有一个名为“responds template”的表单,具有相同的字段:国家、学位和主题。
顾问根据不同的条件创建一些响应模板以更快地回答。
顾问在回复表单中回复评估查询,然后我需要根据提交的用户部分将相关回复列表过滤为下拉列表。
例如,如果用户选择国家:美国,学位:硕士和主题:数学,那么我需要根据这些部分过滤响应模板,并仅显示国家:美国,学位:硕士和主题:数学的响应模板。
我使用了这段代码,但它只适用于第一个条件“国家”,不适用于第二个和第三个 AND。
如果没有符合第一个条件的项目,我还需要按国家和学位进行过滤。
WHERE {thistable}.id IN (
SELECT app_responds.id
FROM app_responds AS app_responds
INNER JOIN app_assessment AS app_assessment
ON app_responds.destination = app_assessment.destination_country AND
app_responds.degree = app_assessment.degree AND
app_responds.field_of_study = app_assessment.field_of_study_id AND
app_responds.subject = app_assessment.subject_id
)
【问题讨论】:
-
根据您想要的结果,“And”的用法是正确的。对我来说突出的一件事是,您将一个表中的“field_of_study”等同于另一个表中的“field_of_study_id”(对于“主题”也是如此)。这是故意的还是疏忽的。我们无法告诉您是否共享表结构。
-
另外,如果您不更改或缩短名称,为什么还要使用“AS”别名?
-
我需要根据两个不同表中的相等值返回记录。我没有完全理解你的意思。
-
Fieldofstudy 可能是基于其名称的文本字段,fieldofstudyid 可能是一个自动递增的整数,基于其名称。所以他们永远不应该是平等的。
-
明白了,它们都不是整数。他们是从其他表中加入的,只是保存 id 的
标签: mysql inner-join conditional-statements