代码之家  ›  专栏  ›  技术社区  ›  gmhk

MySQL中需要的数据库查询帮助

  •  0
  • gmhk  · 技术社区  · 15 年前

    我在编写一个从中的2个表中检索值的查询时寻求帮助。 MySQL .

    场景是

    表A

    ID    Name    Marks
    ===================
    23    John    67
    45    Mark    45
    12    Ram     87
    

    表B的结构如下

    ID    Name    Evaluation Marks
    ==============================
    45    Mark    34
    78    Chris   09
    98    Nancy   10
    23    John    12
    

    我正在尝试编写一个查询,如果我执行以下查询,

    Select "SOMETHING" from Table A where Id=45
    

    我应该得到marks列作为45+34=79,它应该从表A和表B中取和。

    如果我执行id=12的查询。 由于id=12不在表B中,我应该得到87分。

    上面的问题是什么?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Peter Lang    15 年前

    我假设ID在 你的桌子 表A,但两者都可能丢失。如果它总是存在于表中 a ,您可以使用 LEFT JOIN 而不是 UNION .

    SELECT COALESCE(SUM(marks), 0)
    FROM
    (
      SELECT marks FROM a WHERE id = 45
      UNION ALL
      SELECT SUM(evaluation_marks) AS marks FROM b WHERE id = 45
    ) x
    

    编辑

    如果表A中有所有用户,则使用

    SELECT a.marks + COALESCE( SUM( b.evaluation_marks ), 0 )
    FROM a
    LEFT OUTER JOIN b ON ( b.id = a.id )
    WHERE a.id = 45
    GROUP BY a.id, a.marks
    

    不过,您应该考虑更改您的表模型。你为什么把名字和身份证存两次?你不能这样做吗?

    id    name    marks    evaluation marks
    =======================================
    12    Ram     87        0
    23    John    67       12
    45    Mark    45       34
    78    Chris    0        9
    98    Nancy    0       10