把一列写成两列


writing 2 columns from 1 column

我有一个表

Registration
╔══════╦══════════════╦══════════════╦═══════════════╗  
║name1 ║   name2      ║ name2's state║   entity_id   ║
╠══════╬══════════════╬══════════════╣═══════════════╣
║  1   ║     92       ║   complete   ║     152       ║
║  92  ║     1        ║   pending    ║     153       ║
╚══════╩══════════════╩══════════════╩═══════════════╝

是否有可能将一行的name2状态替换为"name1的状态"?我的意思是状态1->92是"完成",我知道状态92->1是"待定"的问题是如何在表中显示相同的信息在一行像在my_table?这可能吗?

my_table
╔══════╦══════════════╦═══════════════╦═══════════════╦═══════════════╗  
║name1 ║     name2    ║ name2's state ║ name1's state ║   entity_id   ║
╠══════╬══════════════╬═══════════════╣═══════════════╣═══════════════╣
║  1   ║     92       ║   complete    ║  pending      ║     152       ║
║  92  ║     1        ║   pending     ║  complete     ║     153       ║
╚══════╩══════════════╩═══════════════╩═══════════════╩═══════════════╝

你需要做的是像这样

SELECT
 t1.name1,
 t1.name2,
 t1.name2state as name1state,
 t2.name2state as name2state,
 t1.entity_id
FROM
 names t1
JOIN
 names t2
ON
 t1.name2 = t2.name1;
ORDER BY
 t1.name1;

这里是一个SQL的小工具,你可以摆弄一下。

http://sqlfiddle.com/!2/79222/4

当然,这只是给你你想要的数据和一个连接的例子,你需要修改它,可能会改变它以适应你的需要。

编辑:

JOIN关键字对于标准连接,此JOIN子句将只显示ON语句为真的记录。ON子句表示为JOIN比较哪两列。所以在上面的SQL语句中,你说你想从表1中SELECT数据,表2 JOINED到表1中,其中表1的列name2 =表2的列name1。您可以使用许多其他类型的join来操作该数据。看看这个Stackoverflow线程,看看你可以使用的所有join类型以及它们的作用。

INNER JOIN, LEFT JOIN, RIGHT JOIN和FULL JOIN的区别是什么?