MySQL子数据行有多个父键,需要构建选择查询

问题描述 投票:0回答:2

父表(动物)

  • ID :
  • name:
  • 性别:[Male=0Female=1other= -1DESEXED - Female=2DESEXED - Male =3]

enter image description here

交易表

  • 交易ID
  • Animal_Father_ID
  • Animal_Mother_ID
  • Animal_Child_ID
  • 日期
  • 状态

样本交易

enter image description here

现在使用Transaction表我需要加入父表,需要获得带有Animal名称的摘要;

enter image description here

我如何使用select语句加入父表(动物)并获得上述结果?

(之前的开发人员创建了这个结构,它有近20GB的数据。现在我无法更改表结构)

mysql
2个回答
2
投票
SELECT TOP 1
   t.ID,
   p.Name as 'Name of Father',
   m.Name as 'Name of Mother',
   c.Name as 'Name if Child',
   t.Date,
   t.Status
FROM Transactions t
JOIN Animals m ON m.ID = t.Animal_Mother_ID
JOIN Animals p ON p.ID = t.Animal_Father_ID
JOIN Animals c ON c.ID = t.Animal_Child_ID

1
投票

我正在讨论koryakinp的答案,但在case语句中加入以转换状态的值:

SELECT 
   t.Transaction_ID,
   p.Name as 'Name of Father',
   m.Name as 'Name of Mother',
   c.Name as 'Name if Child',
   t.Date,
   CASE 
    WHEN t.Status = 1 THEN 'Active'
    WHEN t.Status = 2 THEN 'Value2'
    WHEN t.Status = 3 THEN 'Value3'
    WHEN t.Status = 4 THEN 'Value4'
    WHEN t.Status = 5 THEN 'Value5'
    ELSE t.Status
   END as Status
FROM transaction t
JOIN parent m ON m.ID = t.Animal_Mother_ID
JOIN parent p ON p.ID = t.Animal_Father_ID
JOIN parent c ON c.ID = t.Animal_Child_ID

没有案例陈述:

SELECT 
   t.Transaction_ID,
   p.Name as 'Name of Father',
   m.Name as 'Name of Mother',
   c.Name as 'Name if Child',
   t.Date
FROM transaction t
JOIN parent m ON m.ID = t.Animal_Mother_ID
JOIN parent p ON p.ID = t.Animal_Father_ID
JOIN parent c ON c.ID = t.Animal_Child_ID
© www.soinside.com 2019 - 2024. All rights reserved.