0

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

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

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

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


我不知道如何设置这个 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)

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

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

4

2 回答 2

1

关于连接差异的一个很好的例子是:“INNER JOIN”和“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)
于 2012-09-06T14:21:00.140 回答
1

尝试

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永远不可能是 8873。同样i.value_id不能是 12873。

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

于 2012-09-06T14:10:35.360 回答