如何根据三种条件检索记录?

问题描述

我是HQL的新手。我需要使用HQL / SQL查询基于以下2个条件从表A中获取所有记录: 满足这两个条件“(音乐

下表:

[

TABLE B

[

TABLE C

[

TABLE A

如何根据这三个条件来获取这些记录。有人可以帮我吗。

输出应为

表A中ID为100的记录,因为其位置和值为'A'和'AA'。此外,它还具有音乐和舞蹈技能,音乐值大于100,并且舞蹈值不像“正常”

解决方法

select
*
from a 
inner join b as music on a.id = music.person_id and music.skills = 'Music'
inner join b as dance on a.id = dance.person_id and dance.skills = 'Dance'
inner join c on a.id = c.id 
where c.place = 'A' and c.country = 'AAA'
and music.score < '100'
and dance.score <> 'Normal'

尝试使用少于“ score”列(文本而非数字)时会遇到问题,请参见下面的测试用例

CREATE TABLE mytable(
   Value VARCHAR(6) NOT NULL PRIMARY KEY
);
INSERT INTO mytable(Value) VALUES ('100');
INSERT INTO mytable(Value) VALUES ('a');
INSERT INTO mytable(Value) VALUES ('aa');
INSERT INTO mytable(Value) VALUES ('bbb');
INSERT INTO mytable(Value) VALUES ('cccc');
INSERT INTO mytable(Value) VALUES ('99');
INSERT INTO mytable(Value) VALUES ('9');
INSERT INTO mytable(Value) VALUES ('1');
INSERT INTO mytable(Value) VALUES ('19');
select
*
from mytable where value < '100'
| value |
| :---- |
| 1     |
select
*
from mytable where value > '100'
| value |
| :---- |
| a     |
| aa    |
| bbb   |
| cccc  |
| 99    |
| 9     |
| 19    |
select
*
from mytable where cast(value as integer) > 100
ERROR:  invalid input syntax for integer: "a"

db 提琴here