Mysql 在SQL查询中创建新列

Mysql 在SQL查询中创建新列,mysql,sql,Mysql,Sql,我有一个存储用户的表和一个存储会员费用支付的表: 用户 Id(int) 名称(字符串) 会员费支付 Id(int) 用户(int) 年份(整数) MemberFeePayment中的“用户”列是对已支付费用的用户的引用(外键)。“年”列显示用户支付费用的年份。如果用户已成为会员数年,则MemberFeePayments表中该用户将有多行 现在,我想编写一个获取所有用户的sql查询。生成的表应该有一列,告诉用户是否是特定年份的成员(将提供给查询): 结果 Id(int) 名称(字符串)

我有一个存储用户的表和一个存储会员费用支付的表:

用户

  • Id(int)
  • 名称(字符串)
会员费支付

  • Id(int)
  • 用户(int)
  • 年份(整数)
MemberFeePayment中的“用户”列是对已支付费用的用户的引用(外键)。“年”列显示用户支付费用的年份。如果用户已成为会员数年,则MemberFeePayments表中该用户将有多行

现在,我想编写一个获取所有用户的sql查询。生成的表应该有一列,告诉用户是否是特定年份的成员(将提供给查询):

结果

  • Id(int)
  • 名称(字符串)
  • 伊斯梅尔(布尔)
实现这一目标的好方法是什么


我正在使用MySql(5.6)。

这里有一种方法可以做到这一点。因此,它将点亮所有用户,无论他们是否在MemberFeePayments表中,如果他们是某一年的会员,则显示Yes,否则显示no

select
x.Id,
x.Name,
case when x.member is not null then 'Yes' else 'No' end as IsMember
from
(
  select
  u.Id,
  u.Name,
  m.User as member 
  from Users u
  left join MemberFeePayments m on m.User = u.Id AND m.year = 2014 

)x
或者简单地如下所示,而无需从派生表中进行外部选择

select
u.Id,
u.Name,
case when m.User IS NOT NULL THEN  'Yes' else 'No' end as IsMember
from Users u
left join MemberFeePayments m on m.User = u.Id AND m.year = 2014 

如果每年只有一个费用支付记录,则此项功能应有效:

SELECT 
    U.Id, U.Name, 
    CASE WHEN M.ID IS NULL THEN 0 ELSE 1 END AS `IsMember`
FROM Users U 
LEFT JOIN MemberFeePayments M ON (U.Id = M.User AND M.Year = 2013)
如果您在一年内有多次付款,这将起作用:

SELECT 
    U.Id, U.Name, 
    CASE WHEN COUNT(M.ID) > 0 THEN 1 ELSE 0 END AS `IsMember`
FROM Users U 
LEFT JOIN MemberFeePayments M ON (U.Id = M.User AND M.Year = 2013)
GROUP BY U.Id, U.Name;

使用
左连接

SELECT t1.id,t1.Name,t2.id 
FROM Users t1 
LEFT JOIN MemberFeePayments t2 ON t1.id = t2.user and t2.year = 2014
如果
t2.id
中没有该用户和年份的
MemberFeePayments
数据,则该id将为空

SELECT a.Id,a.Name,if(b.id>0,TRUE,FALSE) as ismember FROM USERS a LEFT JOIN MemberFeepayments b ON a.id=b.id

检查列字段和表名

您尝试过什么吗?这可以通过使用
左加入来轻松完成
您尝试过什么吗?我对加入非常陌生:/I我尝试过,但我这样做的方式只能获得(指定年份)的成员用户。我想要一个所有用户的列表,但要有一个列,告诉他们是否是成员。我打赌解决方案很简单:)-1不需要研究和努力,我猜你的
左连接
b
没有定义,应该是
a.id=b.user
几乎是我已经发布的内容的副本,尽管内部连接不正确-从未付费的人将被排除在外,不是吗?