【问题标题】:SQL Conditional Inner Join WhereSQL 条件内连接 Where
【发布时间】: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


【解决方案1】:

您是否尝试使用 OR 而不是 AND。这可以根据您的条件为您提供任何匹配。如果你使用 AND 所有的树条件都应该是 TRUE 才能得到一个值

【讨论】:

  • 是的,我花了 5 个多小时在上面,但它没有用。它只适用于第一个条件!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 1970-01-01
  • 2015-05-02
  • 1970-01-01
相关资源
最近更新 更多