【问题标题】:How do i build this JOIN statement? Having trouble with conditions我如何构建这个 JOIN 语句?条件有问题
【发布时间】:2012-08-31 09:08:48
【问题描述】:

现在我刚开始接触联接,所以我可能缺少对它的一些核心理解,但这是我想做的:

我有一个包含个人资料的表格,以及几个带有 profile_id、一些不相关数据和 value_id(一对一关系)的表格(角色、技能、头衔等)

用户将输入一个包含不同 value_id 的数组,我想检索所有配置文件的 id,这些配置文件的对应表的 value_id 与我们从用户那里检索到的相匹配。

输入中的某些值被指定为仅匹配某个表(在本例中为角色和行业),并且该部分现在正在工作。但是我不能做的是检查 any 的相关表中是否有匹配项。


我不知道如何设置这个 sql 块的样式。抱歉。 编辑:它自己设计的。整洁。
在这个例子中,我有三个值。一个 (88) 指定用于搜索某个角色,一个用于行业 (128),第三个 (73) 必须匹配一组表中的至少一行。

SELECT DISTINCT(profiles.id) as id,  
FROM profiles  
INNER JOIN profile_experience_roles r ON(r.profile_id = profiles.id)  
INNER JOIN profile_experience_industries i ON(i.profile_id = profiles.id)  
INNER JOIN profile_experience_technology t ON(t.profile_id = profiles.id)  
INNER JOIN profile_wanted_roles w ON(w.profile_id = profiles.id)  
INNER JOIN profile_languages l ON(l.profile_id = profiles.id)   
WHERE r.value_id = 88 AND i.value_id = 128 AND  
(r.value_id = 73 OR i.value_id = 73 OR t.value_id = 73 OR w.value_id = 73 OR l.value_id = 73)

最后一行是导致问题的原因。任何帮助表示赞赏。

另外,我以前从未在这里发过帖子,所以我不知道我在做什么。
谢谢

【问题讨论】:

  • 那是出色的符号Edit: It styled itself. Neat.!你让我度过了一个晚上! :)

标签: mysql search join


【解决方案1】:

这里有一个关于连接差异的好例子:What is the difference between "INNER JOIN" and "OUTER JOIN"?

内部连接可能是原因。您可能正在加入不存在的 id,并且所有数据都没有返回。我还包括了 Robin 对 IN 所做的更改并删除了 r.value 和 i.value

试试这个:

SELECT 
    DISTINCT(profiles.id) as id,  
FROM profiles  
RIGHT JOIN profile_experience_roles r ON(r.profile_id = profiles.id)  
RIGHT JOIN profile_experience_industries i ON(i.profile_id = profiles.id)  
RIGHT JOIN profile_experience_technology t ON(t.profile_id = profiles.id)  
RIGHT JOIN profile_wanted_roles w ON(w.profile_id = profiles.id)  
INNER JOIN profile_languages l ON(l.profile_id = profiles.id)   
WHERE profiles.id is not null AND r.value_id = 88 AND i.value_id = 128 AND 
    73 IN (t.value_id, w.value_id, l.value_id)

【讨论】:

    【解决方案2】:

    试试

    WHERE r.value_id = 88 AND i.value_id = 128 AND 
    73 IN (r.value_id, i.value_id, t.value_id, w.value_id, l.value_id)
    

    在你的情况下,你应该可以去

    WHERE r.value_id = 88 AND i.value_id = 128 AND 
    73 IN (t.value_id, w.value_id, l.value_id)
    

    因为r.value_id 永远不可能是 88 73。同样i.value_id 也不能是 128 73。

    请注意,INNER JOIN 要求在这些表的所有之间建立连接以获取任何行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-04
      • 2020-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多