【问题标题】:SQL query correctionSQL查询更正
【发布时间】:2017-06-03 07:38:29
【问题描述】:

我有以下两个表格

餐桌奖

表格条目

我需要做的就是列出event_idhorse_id、每个参赛作品的位置和奖金。为此,我执行了以下查询,但我没有得到准确的奖金。

SELECT entry.event_id,entry.horse_id, entry.place, prize.prizemoney 


FROM entry


LEFT OUTER JOIN prize ON prize.event_code=entry.event_id
GROUP BY event_id, horse_id;

输出

【问题讨论】:

  • 您能否具体说明为什么 Prizemoney 不准确?返回的值有什么问题?
  • 我不明白您在预期输出中得出奖金值的逻辑。
  • 如您所见,PLACE 2 的事件 0101 的奖金应该是 60,但我的结果是 120。
  • 首先弄清楚你使用的是哪个RDBMS
  • Tim,我只想将正确的奖金添加到我使用 Left Join 的条目表中。

标签: mysql sql sql-server database


【解决方案1】:

问题在于您的event_id 本身并不是真正独一无二的——有多个行具有相同的 event_id。您实际上似乎拥有的是定义唯一条目的复合键(带有event_idplace)。因此,当您仅在event_id 上加入时,MySQL 不确定要返还奖金的价值。例如,对于 event_id = 101,应该返回四个不同的值 (120, 60, 30, 10)。

编辑:event_idplace 上的 LEFT JOIN:

LEFT OUTER JOIN prize ON prize.event_code=entry.event_id AND prize.place = entry.place

原答案:如果您还没有为您的奖金表(Table Prize)和您的表条目创建主键约束,您需要这样做:活动ID 101,第一名应该有自己的主键,事件 ID 101,第二名自己的主键,等等。然后加入主键以在您的输出中获得正确的结果表。

【讨论】:

  • 非常感谢陈宇:D
【解决方案2】:

试试这个

select e.event_id, e.horse_id, e.place, p.prizemoney
  from entry e
left join prize p on p.event_code = e.event_id AND e.place = p.place

【讨论】:

    猜你喜欢
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    相关资源
    最近更新 更多