Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mysql中如何这样打印:只在一个查询中_Mysql - Fatal编程技术网

在mysql中如何这样打印:只在一个查询中

在mysql中如何这样打印:只在一个查询中,mysql,Mysql,我有一张员工桌 我想要的是薪水6000转换成另一张表…如下所示 我试着这样做:没有产生正确的结果 选择 (当工资6000时,则薪资结束)薪资 来自员工 希望你明白我想要什么。任何帮助都是可观的实现这一点的方法是创建两个表,一个表的薪水=6000,然后加入它们。现在,由于这些表中没有自然排序,我们必须为每个表创建一个人工行号,然后在此基础上加入它们。因为我们不知道哪个表可能有更多的行,所以我们必须进行完全外部联接。不幸的是,MySQL不支持这一点,因此我们必须用左连接联合和右连接来模拟它:

我有一张员工桌

我想要的是薪水<6000转换成一列 工资>6000转换成另一张表…如下所示

我试着这样做:没有产生正确的结果

选择
(当工资<6000,则工资结束时)工资低于6000,
(当薪资>6000时,则薪资结束)薪资
来自员工

希望你明白我想要什么。任何帮助都是可观的

实现这一点的方法是创建两个表,一个表的薪水<6000,另一个表的薪水>=6000,然后
加入它们。现在,由于这些表中没有自然排序,我们必须为每个表创建一个人工行号,然后在此基础上加入它们。因为我们不知道哪个表可能有更多的行,所以我们必须进行
完全外部联接。不幸的是,MySQL不支持这一点,因此我们必须用
左连接
联合
右连接来模拟它:

SELECT e1.salary AS salary_less_then_6000, e2.salary AS salary_greater_then_6000 
FROM (SELECT salary, @rownum1:=@rownum1+1 AS rownum
      FROM employees
      JOIN (SELECT @rownum1 := 0) r
      WHERE salary < 6000
      ORDER BY salary
      ) e1
LEFT JOIN (SELECT salary, @rownum2:=@rownum2+1 AS rownum
      FROM employees
      JOIN (SELECT @rownum2 := 0) r
      WHERE salary >= 6000
      ORDER BY salary
      ) e2
ON e1.rownum = e2.rownum
UNION
SELECT e1.salary AS salary_less_then_6000, e2.salary AS salary_greater_then_6000 
FROM (SELECT salary, @rownum3:=@rownum3+1 AS rownum
      FROM employees
      JOIN (SELECT @rownum3 := 0) r
      WHERE salary < 6000
      ORDER BY salary
      ) e1
RIGHT JOIN (SELECT salary, @rownum4:=@rownum4+1 AS rownum
      FROM employees
      JOIN (SELECT @rownum4 := 0) r
      WHERE salary >= 6000
      ORDER BY salary
      ) e2
ON e1.rownum = e2.rownum

在您的表中再添加一行
('e',9000)
,此查询是否正常工作?@VladimirKovpak good pickup-需要完全外部联接。现在如果MySQL有一个。。。回到图纸上board@VladimirKovpak现在,模拟一个完整的外部联接,这样无论哪个表有更多的条目,查询都可以工作。可以实现您想要的结果,但这将是复杂而棘手的,因为要实现这样的结果,您必须有明确的联接规则,而这个规则不明确,此规则可能会根据<6000和>6000的薪资计数而有所不同(不清楚要加入另一个表,lt_6000到gt_6000或gt_6000到lt_6000)。
SELECT e1.salary AS salary_less_then_6000, e2.salary AS salary_greater_then_6000 
FROM (SELECT salary, @rownum1:=@rownum1+1 AS rownum
      FROM employees
      JOIN (SELECT @rownum1 := 0) r
      WHERE salary < 6000
      ORDER BY salary
      ) e1
LEFT JOIN (SELECT salary, @rownum2:=@rownum2+1 AS rownum
      FROM employees
      JOIN (SELECT @rownum2 := 0) r
      WHERE salary >= 6000
      ORDER BY salary
      ) e2
ON e1.rownum = e2.rownum
UNION
SELECT e1.salary AS salary_less_then_6000, e2.salary AS salary_greater_then_6000 
FROM (SELECT salary, @rownum3:=@rownum3+1 AS rownum
      FROM employees
      JOIN (SELECT @rownum3 := 0) r
      WHERE salary < 6000
      ORDER BY salary
      ) e1
RIGHT JOIN (SELECT salary, @rownum4:=@rownum4+1 AS rownum
      FROM employees
      JOIN (SELECT @rownum4 := 0) r
      WHERE salary >= 6000
      ORDER BY salary
      ) e2
ON e1.rownum = e2.rownum
salary_less_then_6000   salary_greater_then_6000
3000                    7000
5000                    8000
(null)                  9000