【问题标题】:Extra columns in sql select query or viewsql select查询或视图中的额外列
【发布时间】:2015-04-16 11:56:09
【问题描述】:

所以我目前在我的数据库中有 3 个表, 一份包含关于会员的信息,一份关于他们的船(长度),一份关于价格。

盖子(成员)

Schip(船)

关税(价格)

我需要创建一个查询来组合这些表的各个部分,但我还没有找到任何方法来做到这一点。这就是我的“新”表/选择语句结果应该是这样的:

  • Naam 应该是 Lid.Naam 的位置(来自第一个表)
  • Adres 应该是 Lid.Adres(来自第一个表)
  • Email 应该是 Lid.Email(来自第一个表)
  • contribute 应该是 Tarief.Bedrag where Soort = 'contribute'
  • liggeld 的位置应为 (Tarief.Bedrag where Soort = 'liggeld') x (Schip.lengte),如果 Lid.Schip 为空,则该数量应为 0
  • 应该在哪里总计 liggeld + contributie
  • 最后,所有拥有 lid.ContributeBetaald = 'ja' 的人都不应该出现在列表中

我制作了一个示例,说明如果查询完全运行,它应该是什么样子:

如果有人知道如何为此或视图创建查询并愿意帮助我,谢谢!

【问题讨论】:

  • 这是什么意思? (Tarief.Bedrag where Soort = 'liggeld')

标签: mysql sql database calculated-columns


【解决方案1】:

试试这个:

SELECT l.Naam, l.Adres, l.Email, 
(SELECT Bedrag FROM Tarief WHERE Soort = 'contributie' LIMIT 1) AS 'Contributie',
(SELECT Bedrag FROM Tarief WHERE Soort = 'liggeld' LIMIT 1)*IFNULL(s.length,0) AS 'Liggeld',
(SELECT Bedrag FROM Tarief WHERE Soort = 'contributie' LIMIT 1)+
(SELECT Bedrag FROM Tarief WHERE Soort = 'liggeld' LIMIT 1)*IFNULL(s.length,0)  AS 'Totaal'
FROM Lid l
LEFT JOIN Schip s ON l.Schip=s.Naam
WHERE l.ContributieBetaald <> 'ja';

【讨论】:

  • 当涉及到选择列表中的子选择时,我总是有点担心。我想确保没有子选择返回多于行。 (最大/限制/随便)
  • 您对一栏的限制是正确的。我从提供的信息中得到的是,Tarief 是某种配置表,Soort 列将是唯一列,这就是我没有考虑它的原因。但是,我会将 LIMIT 语句添加到子查询中以使查询更好。感谢您的评论!
  • 我收到此错误:SQL Fout (1370):执行命令拒绝用户 ''@'localhost' 执行例程 'test.NVL'
猜你喜欢
  • 2017-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
  • 1970-01-01
  • 2012-04-16
  • 2021-04-04
相关资源
最近更新 更多