SQL - 来自多个表的信息,具有相同字段的两个变体。

时间:2014-09-12 23:11:17

标签: mysql sql join

大家好我正在尝试从两个表中选择字段并根据条件显示两个字段之一,基本上我需要:

wp_cimy_uef_data.VALUE WHERE wp_cimy_uef_data.FIELD_ID = 3
wp_cimy_uef_data.VALUE WHERE wp_cimy_uef_data.FIELD_ID = 4
wp_users.user_email

我知道我必须加入表格,我认为我已经做到了这一点,但我不知道如何根据我到目前为止的WHERE选择两次VALUE字段:

SELECT wp_cimy_uef_data.VALUE, wp_users.user_email, FROM wp_users JOIN wp_cimy_uef_data ON wp_users.ID = wp_cimy_uef_data.USER_ID

我可能会像

那样
SELECT (wp_cimy_uef_data.VALUE WHERE wp_cimy_uef_data.FIELD_ID = 3), (wp_cimy_uef_data.VALUE WHERE wp_cimy_uef_data.FIELD_ID = 4)

但显然这是错误的。

2 个答案:

答案 0 :(得分:1)

您可以使用case

SELECT 
 case when d.FIELD_ID = 3 then d.VALUE end val1,
 case when d.FIELD_ID = 4 then d.VALUE end  val2,
 u.user_email
FROM wp_users u
JOIN wp_cimy_uef_data d ON u.ID = d.USER_ID

使用max选择非空值

SELECT 
 max(case when d.FIELD_ID = 3 then d.VALUE end) val1,
 max(case when d.FIELD_ID = 4 then d.VALUE end)  val2,
 u.user_email
FROM wp_users u
JOIN wp_cimy_uef_data d ON u.ID = d.USER_ID 
GROUP BY  u.user_email /* or put  group by u.ID*/

答案 1 :(得分:1)

如果我理解正确,你可以通过两个连接做你想要的事情:

SELECT d3.VALUE, d4.value, u.user_email
FROM wp_users u JOIN
     wp_cimy_uef_data d3
     ON u.ID = d3.USER_ID and d3.field_id = 3 JOIN
     wp_cimy_uef_data d4
     ON u.ID = d4.USER_ID and d4.field_id = 4;

请注意使用表别名来区分表的两个版本。