mysql从第2行中选择多行相等

mysql从第2行中选择多行相等,mysql,select,union-all,Mysql,Select,Union All,我有两张桌子: TableA TableB ID_A ID_B P1 Text P2 P3 P4 - - 谢谢尼克,他帮助了我 我得到: ID_A P1 P2 P3 P4 ID_B Text 1 7 5 6 6 5 E 1 7 5 6 6 6 F 1 7 5 6 6 6 F 1

我有两张桌子:

TableA          TableB
ID_A            ID_B
P1              Text
P2
P3
P4
-

-

谢谢尼克,他帮助了我

我得到:

ID_A    P1  P2  P3  P4    ID_B Text
1       7   5   6   6      5    E
1       7   5   6   6      6    F
1       7   5   6   6      6    F
1       7   5   6   6      7    G
我怎么能得到这个

ID_A    P1  P2  P3  P4    ID_B Text
1       7   5   6   6      7    G
1       7   5   6   6      5    E
1       7   5   6   6      6    F
1       7   5   6   6      6    F
1°行P1=ID_B

2°行P2=ID_B

3°行P3=ID_B

4°行P4=ID_B


您可以使用
案例
用于自定义排序顺序。这将在所需的排序中显示结果

 SELECT a.*, b.*
 FROM (SELECT ID_A, P1 AS P FROM TableA
  UNION ALL
  SELECT ID_A, P2 FROM TableA
  UNION ALL
  SELECT ID_A, P3 FROM TableA
  UNION ALL
  SELECT ID_A, P4 FROM TableA) p
 JOIN TableA a ON a.ID_A = p.ID_A
 JOIN TableB b ON b.ID_B = p.P
 ORDER BY CASE b.ID_B
     WHEN 7 THEN 4
     WHEN 5 THEN 3
     ELSE 2
 END DESC

发生这种情况是因为
p
值的派生表中没有顺序。为了能够进行排序,我们可以添加另一个表示
P
编号的字段(如
P1
P2
等),并按该字段而不是
ID\B
进行排序:

SELECT a.*, b.*
FROM (SELECT 1 AS PNUM, ID_A, P1 AS P FROM TableA
      UNION ALL
      SELECT 2, ID_A, P2 FROM TableA
      UNION ALL
      SELECT 3, ID_A, P3 FROM TableA
      UNION ALL
      SELECT 4, ID_A, P4 FROM TableA) p
JOIN TableA a ON a.ID_A = p.ID_A
JOIN TableB b ON b.ID_B = p.P
ORDER BY a.ID_A, p.PNUM
输出:

ID_A    P1  P2  P3  P4  ID_B    Text
1       7   5   6   6   7       G
1       7   5   6   6   5       E
1       7   5   6   6   6       F
1       7   5   6   6   6       F

谢谢你,你是sql语言的天才。我的sql知识是基本的。感谢大家的贡献,但最好的解决办法是尼克。
 SELECT a.*, b.*
 FROM (SELECT ID_A, P1 AS P FROM TableA
  UNION ALL
  SELECT ID_A, P2 FROM TableA
  UNION ALL
  SELECT ID_A, P3 FROM TableA
  UNION ALL
  SELECT ID_A, P4 FROM TableA) p
 JOIN TableA a ON a.ID_A = p.ID_A
 JOIN TableB b ON b.ID_B = p.P
 ORDER BY CASE b.ID_B
     WHEN 7 THEN 4
     WHEN 5 THEN 3
     ELSE 2
 END DESC
SELECT * FROM TableA as a1
left join TableB as b1 on ID_B = p1
union ALL
SELECT * FROM TableA
left join TableB on ID_B = p2
union ALL
SELECT * FROM TableA
left join TableB on ID_B = P3
union ALL
SELECT * FROM TableA
left join TableB on ID_B = p4
SELECT a.*, b.*
FROM (SELECT 1 AS PNUM, ID_A, P1 AS P FROM TableA
      UNION ALL
      SELECT 2, ID_A, P2 FROM TableA
      UNION ALL
      SELECT 3, ID_A, P3 FROM TableA
      UNION ALL
      SELECT 4, ID_A, P4 FROM TableA) p
JOIN TableA a ON a.ID_A = p.ID_A
JOIN TableB b ON b.ID_B = p.P
ORDER BY a.ID_A, p.PNUM
ID_A    P1  P2  P3  P4  ID_B    Text
1       7   5   6   6   7       G
1       7   5   6   6   5       E
1       7   5   6   6   6       F
1       7   5   6   6   6       F