现在我刚开始研究联接,所以我可能缺少对它的一些核心理解,但我想做的是:
我有一个带有配置文件的表,还有几个带有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)
最后一句话是造成问题的原因。感谢您的帮助。
此外,我以前从未在这里发帖,所以我不知道自己在做什么
感谢
尝试
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)
由于CCD_ 1永远不可能是88和73。i.value_id
也不能是128和73。
请注意,INNER JOIN
需要所有这些表之间的连接来获取任何行。
关于联接差异的一个很好的例子是:;INNER 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)