我有3张桌子。
user
id
firstname
lastname
...
user_rel_domain
user_id
domain_id
value
domain
id
name
如果user_rel_domain中的值高于0,我想进行与firstname,lastname和domain(s)名称匹配的搜索。
如何在单个MySQL查询中执行此操作?
编辑:
好吧,我觉得这个想法很容易从3个表的例子中集成,但我实际上有6个表,我不认为答案可以用于我真正拥有的结构,所以这里是,对不起大家!:
user
id
firstname
lastname
...
user_rel_domain
user_id
domain_id
value
domain
id
name
user_rel_mandate
user_id
mandate_id
value
mandate
id
cat_id
name
mandate_cat
id
name
基本上我想搜索所有“name”列以及user表的firstname和lastname,而关系表中的所有值都高于0。
答案 0 :(得分:3)
编辑:嗯......我对你的新要求做了一些假设,所以让我知道这是否在球场:
SELECT
u.firstName,
u.lastName,
d.name AS domainName,
m.name AS mandateName,
mc.name AS mandateCatName
FROM
user u
JOIN user_rel_domain urd ON urd.user_id = u.id AND urd.value > 0
JOIN domain d ON d.id = urd.domain_id
JOIN user_rel_mandate urm ON urm.user_id = u.id AND urm.value > 0
JOIN mandate m ON m.id = urm.mandate_id
JOIN mandate_cat mc ON mc.id = m.cat_id
WHERE
u.firstName = @SearchTerm
OR u.lastName = @SearchTerm
OR d.Name = @SearchTerm
OR m.Name = @SearchTerm
OR mc.Name = @SearchTerm
答案 1 :(得分:2)
SELECT user.firstname, user.lastname FROM user
JOIN user_rel_domain ON user.id=user_rel_domain.user_id
JOIN domain ON domain.id=user_rel_domain.domain_id
WHERE user_rel_domain.value>0
编辑:您是否正在寻找完全匹配,例如,所有列中的名称应该等于您要查找的字符串?或者如果任何名字相同就足够了吗?
也许这就是:
SELECT user.firstname, user.lastname FROM user
JOIN user_rel_domain ON user.id=user_rel_domain.user_id
JOIN domain ON domain.id=user_rel_domain.domain_id
JOIN user_rel_mandate ON user.id=user_rel_mandate.user_id
JOIN mandate ON user_rel_mandate.mandate_id=mandate.id
JOIN mandate_cat ON mandate.id=mandate_cat.mandate_ID
WHERE
user_rel_domain.value>0 AND
(user.firstname="string" OR user.lastname="string" OR domain.name="string" OR mandate.name="string")
答案 2 :(得分:2)
SELECT u.firstname, u.lastname, d.name
FROM user_rel_domain urd
INNER JOIN user u
ON urd.user_id = u.id
INNER JOIN domain d
ON urd.domain_id = d.id
WHERE urd.value > 0;