首页 > 解决方案 > 如何根据来自 T1 的数据返回 T2 名称?

问题描述

T1游戏

ID   IDC  POWER  HP      LTIME
01   234  NULL   NULL    -1
02   235  NULL   NULL    -1
03   236  312    213     -1
04   237  111    111      1
05   238  331    111      4

T2英雄

ID   NAME
234  TOM
235  JEK
236  MAX
237  JIZ
238  ZAK

T1 IDC = T2 的 ID

我需要用 LTIME != -1 返回所有在 POWER 或 HP 中除 null 之外的所有英雄

查询应该从 T2 返回该英雄的 ID 和 NAME。

在此示例中,查询应返回:236 MAX

我试过这个:

SELECT heroes.ID, heroes.name
FROM heroes
WHERE LTIME in ( SELECT * FROM game WHERE LTIME IS NOT NULL and POWER or HP != -1)

标签: mysqlsql

解决方案


WHERE在子查询中的条件不正确。0不是一回事NULL。并且POWER or HP != 0不是您测试两列的方式。你必须写POWER IS NOT NULL AND HP IS NOT NULL

表中没有LTIMEheroes,因此您无法在主查询中对其进行测试。子查询应该返回 ID,您可以对其进行测试。但通常最好使用JOIN而不是IN.

SELECT h.ID, h.name
FROM heroes AS h
JOIN game AS g on h.id = g.idc
WHERE g.ltime = -1 AND g.power IS NOT NULL AND g.hp IS NOT NULL

推荐阅读