如何在同一表中选择取决于变量的不同数据

时间:2019-08-26 11:01:35

标签: java sql spring-boot jpa

我需要从联接表中选择一些数据。事实是该表根据变量x更改其数据(如果x = 1,则数据为A,如果x = 2,则数据为B)

我正在尝试这样的事情:

"SELECT new nameDTO(joinTableA.dataA, joinTableB.dataB, table.something, table....) "
              + "FROM Table table "
              + "JOIN joinTable joinTableA"
              + "JOIN joinTable joinTableB "
              + "WHERE joinTableA.x = 1 AND joinTableA.x = 2"
              + "AND ..... "

但是,此WHERE无效,因为查询什么也不返回,而是返回两种情况的数据。

我希望这个问题可以理解,这有点棘手。

1 个答案:

答案 0 :(得分:0)

您的问题中缺少一些信息,所以我做了一些弥补,希望这些信息与您要执行的操作足够接近。

我从两个表开始。我只显示表的内容,而不是定义。

表1

id    content
-------------
1     Hello
2     World

table2

table1_id    x   content_a   content_b
--------------------------------------
1            1   Content 1   Content 2
1            2   Content 3   Content 4
2            1   Content 5   Content 6
2            2   Content 7   Content 8

使用以下SQL语句

SELECT
  t1.content `greeting`,
  CASE
    WHEN t2.x = 1 THEN t2.content_a
    WHEN t2.x = 2 THEN t2.content_b
    ELSE "Unknown x value"
  END `content`
FROM
  table1 `t1`
  INNER JOIN table2 `t2` ON t2.table1_id = t1.id
;

结果将是

greeting     content
----------------------
Hello        Content 1
Hello        Content 4
World        Content 5
World        Content 8

应该可以将其转换为JPQL查询或条件查询。