mysql - 三个条件的sql查询

标签 mysql sql singlestore sql-query-store

我有一个包含如下内容的表的数据库:

message_number  message_type   message_chat
     0                IN           Hi
     1                OB           Hello
     2                IN           Help
     3                IN           Want to find this thing
     4                OB           Sure
     5                OB           Please let me know

我已经写了 5 行,因为我想在我显示的示例表中合并我想要查询的所有可能情况。

现在在我的查询输出中,我想要这样的东西:

message_in                                 message_out
  Hi                                         Hello
  Help                                        NULL
  Want to find this string                   Sure
     NULL                                  Please let me know

所以我想考虑的情况是:

  1. 假设如果 message_number=0 和 message_number=1 的 message_type 值为 IN,则将 message_chat_in 设为 message_chat(在 message_number=0)并将 message_chat out 设为 NULL,然后迭代 message_number=1

    <
  2. 如果 message_number =0 的 message_type=IN 和 message_number =1 的 message_type=OB,则将 message_chat(at message_number=0) 显示为 message_chat_in 并将 message_chat(at message_number=1) 显示为 message_out 并且不要迭代 message_number= 1;

希望我已经阐明了条件,尽管我在预期输出中包含了所有三个条件。我的 sqlquery 应该是什么样子?

编辑:我使用的是 mysql 版本 5.5.8

最佳答案

尝试下面的查询

SELECT
  q1.message_number in_num,
  q1.message_chat in_chat,
  q2.message_number out_num,
  q2.message_chat out_chat
FROM
  (
    SELECT *,@i1:=IFNULL(@i1,0)+1 num
    FROM Chat
    ORDER BY message_number
  ) q1
LEFT JOIN
  (
    SELECT *,@i2:=IFNULL(@i2,0)+1 num
    FROM Chat
    ORDER BY message_number
  ) q2
ON q2.num=q1.num+1 AND q2.message_type<>q1.message_type
WHERE q1.message_type='IN'

UNION ALL

SELECT
  q1.message_number in_num,
  q1.message_chat in_chat,
  q2.message_number out_num,
  q2.message_chat out_chat
FROM
  (
    SELECT *,@i3:=IFNULL(@i3,0)+1 num
    FROM Chat
    ORDER BY message_number
  ) q1
RIGHT JOIN
  (
    SELECT *,@i4:=IFNULL(@i4,0)+1 num
    FROM Chat
    ORDER BY message_number
  ) q2
ON q2.num=q1.num+1 AND q2.message_type<>q1.message_type
WHERE q2.message_type='OB'
  AND q1.message_type IS NULL

ORDER BY IFNULL(in_num,out_num)

SQL fiddle -http://sqlfiddle.com/#!9/95a515/1

第二种变体

SET @i1 = 0;
SET @i2 = 0;
SET @i3 = 0;
SET @i4 = 0;

-- the same query

SQL fiddle -http://sqlfiddle.com/#!9/95a515/2

或者

SELECT 0,0,0,0 INTO @i1,@i2,@i3,@i4;

-- the same query

SQL fiddle -http://sqlfiddle.com/#!9/95a515/5

关于mysql - 三个条件的sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47428915/

相关文章:

sql - 哪个效率高?使用子查询或连接表查询

python - SQLAlchemy 与 MemSQL 上的语法错误

mysql - GlassFish 连接池

sql - 导入数据库导致字符集错误

Linux 上的 PHP 随机无法连接到 Microsoft SQL Server 2005

mysql - MEMSQL 与 MySQL

laravel - Laravel Vapor 环境上 SingleStore 托管实例的 SSL 证书

php - MySQL登录错误警告

php - 如何在 android 中处理远程网站的身份验证?

c# - 带参数的 iDB2 Select 命令返回 SQL0418