仅当字段具有特定值时才加入mysql
我正在尝试在某些条件下使用join获取表。我的桌子是:仅当字段具有特定值时才加入mysql,mysql,join,Mysql,Join,我正在尝试在某些条件下使用join获取表。我的桌子是: tab_registrations -------------------------------------------- reg_id |familyid| familyname | parent_id | | | | | -------|--------|-------------|-----------|
tab_registrations
--------------------------------------------
reg_id |familyid| familyname | parent_id |
| | | |
-------|--------|-------------|-----------|
1 | 2 | null | null |
-------|--------|-------------|-----------|
2 | others | abc | 3 |
-------|--------|-------------|-----------|
3 | 3 | null | null |
-------|--------|-------------|-----------|
4 | others | def | 2 |
-------|--------|-------------|-----------|
tab_family
-------------------------------------
family_id | family_name | parent_id |
| | |
-------------------------------------
1 | tyu | 0 |
-------------------------------------
2 | xyz | 1 |
-------------------------------------
3 | mno | 2 |
-------------------------------------
我想在以下位置连接这些表:
SELECT tab_registration.*,tab_family.family_id,tab_family.parent_id
FROM `tab_registration`
join tab_family on tab_registration.family_id = tab_family.family_id
WHERE reg_id = 1
我怎样才能做到这一点?有人能帮我吗?更改为
左连接
,条件是选项卡注册。familyid
不等于其他
。此外,您还可以使用条件CASE..WHEN
语句获取familyname
和parent\u id
值
SELECT tr.*,
CASE WHEN tr.familyid = 'others' THEN tr.familyname
ELSE tf.family_name
END AS familyname,
CASE WHEN tr.familyid = 'others' THEN tr.parent_id
ELSE tf.parent_id
END AS parent_id
FROM tab_registration tr
LEFT JOIN tab_family tf
ON tr.family_id = tf.family_id AND
tr.familyid <> 'others'
WHERE tr.reg_id = 1
选择tr.*,
当tr.familyid='others'然后tr.familyname时的情况
ELSE tf.family_name
以familyname结尾,
当tr.familyid='others'然后tr.parent\u id时的情况
ELSE tf.parent_id
作为父项结束\u id
从tab_注册tr
左连接选项卡\u族tf
在tr.family_id=tf.family_id和
tr.familyid‘其他人’
其中tr.reg_id=1
对于多表查询,为了代码的清晰性和可读性,最好使用别名。此查询可能有用
SELECT tr.*,tf.family_id,tf.parent_id,
IF(tr.familyid='others',tr.familyname,tf.family_name) as fname
IF(tr.familyid='others',tr.parent_id,tf.parent_id) as parentId
FROM `tab_registration` tr
left join tab_family tf on tr.family_id = tf.family_id
哪里是
标签注册中的家庭id
。您要精确匹配的内容。预期的输出是什么?family\u id是tab\u注册中的familyid。。看我的edit@tim我想要整个标签注册
。仅当tab_registrations.familyid不是“其他”时,我才想加入。选择tab_registration.*,tab_family.family_id,tab_registration中的tab_family.parent_id加入tab_registration.familyid=tab_family.family_id,其中tab_registration.reg_id=1和tab_registration.familyname不为NULL
。尝试此操作。查询正在运行。。!!但是当tr.familyid='others'
时,结果包含tr.familyname
twice@Aishwaryas有什么影响吗?问题在于tr.*
。如果familyid
不等于others
yes,是否要获取tab\u registration
表的所有列,或者用tab\u family
替换它们。。我得到了它。。!你又是我的救星了@MadhurBhaiya