两个表之间的case语句(高级)

8zzbczxx  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(394)

我不知道怎么做,我假设一个案件陈述,但让我知道,如果有更好的方法。
我有两张记录赛马的table。一个跟踪他们的信息,另一个跟踪他们的比赛结果。这些马中有一些将被饲养。为了繁殖,他们必须是3岁或以上,他们必须有比赛的那一年或前一年。
例如,平流层出生于2000年,她有资格从2003年开始繁殖。然而,她在2002年、2003年、2004年、2005年和2006年参加了比赛。这意味着她的“开放年”是2008年、2009年、2010年等等。
我不知道如何证明这一点,因为这将是类似于(从马表)yob+3,并考虑到从vètesthorse(记录是)最后一天+1年,没有马驹,这一年(horseid不等于damid或sireid)。
我的目标是让它像这样显示-horsename,yob,gender,years open(这是我试图创造的价值)
提前感谢-让我知道如果你需要更多的信息!
编辑:表结构-马:hid(身份证号码,每匹马唯一)hname(马名)yob性别sire sired dam damid类型oname stable
结果:
选项sid(showid,每个节目唯一)sname date(as 00-00-0000)host cname grade gender year place tokens
编辑:sqfiddle是http://sqlfiddle.com/#!9/5e1ad6但如果它不起作用,这里是我使用的代码。我只输入了几个值,因为这两个db都非常大,但这里有一匹马要测试!

CREATE TABLE Horses 
(HID INT(11), 
 HName VARCHAR(225), 
 YOB YEAR, 
 Sire VARCHAR(225), 
 SireID INT(5), 
 Dam VARCHAR(225), 
 DamID INT(5) );

INSERT INTO Horses (HID, HName, YOB, Sire, SireID, Dam, DamID)
VALUES ('17578','Stratosphere','2001','Stonebridge First', '464', 'Cloud Nine', '6714');
INSERT INTO Horses (HID, HName, YOB, Sire, SireID, Dam, DamID)
VALUES ('36791','Troposphere','2012','Trapper Joe', '36595', 'Stratosphere', '17578');
INSERT INTO Horses (HID, HName, YOB, Sire, SireID, Dam, DamID)
VALUES ('38249','Xalena','2011','Arlin', '31886', 'Stratosphere', '17578');

CREATE TABLE Results 
(HID INT(11), 
 HName VARCHAR(225), 
 Date2 DATE, 
 CName VARCHAR(225), 
 SName VARCHAR(225), 
 ShowID INT(5) );

INSERT INTO Results (HID, HName, Date2, CName, SName, ShowID)
VALUES ('17578','Stratosphere','2004-10-10','SHRA October Trotting Derby, 1 mile, 3YO Trotters', 'SHRA October Racemeet', '13');

INSERT INTO Results (HID, HName, Date2, CName, SName, ShowID)
VALUES ('17578','Stratosphere','2007-01-19','Snow Drift Trot, 3YO+ Trotting FM', 'SHRA Start the Season Meet', '889');
2exbekwf

2exbekwf1#

考虑到两个表被命名为 horses 以及 race_results 像下面这样的东西应该可以很好的发挥作用。

SELECT * FROM horses
LEFT JOIN  race_results race ON (
  race.horse_id = horses.id 
  AND race.year IN (YEAR(CURDATE()), (YEAR(CURDATE()) - 1))
)
WHERE TIMESTAMPDIFF( YEAR, horses.dob, now()) >= 3;

将上述内容视为poc,您可以根据表结构来实现它。
更新:
如果要更改列数据类型,只需创建另一列 Date2 使用正确的数据类型,然后运行以下查询,交叉检查中的所有值是否正确 Date2 列,您可以将 Date 列。

UPDATE table_name SET Date2 = STR_TO_DATE(
  CONCAT(
    LEFT(SUBSTRING_INDEX(Date,',',1), length(Date)-2)), 
    " ",
    SUBSTRING_INDEX(Date,',',-1)
  ), '%M %d %Y'
)

相关问题