2015-06-12 5 views
1

У меня есть таблица, состоящая из имен, точек и лет. Мне нужна команда, чтобы вернуть все имена в течение определенного года, даже если имя не включено в этот год. Примерsqlite self join with where clause

Name  Points Year 
------- ------- 
tom   8  2011 
jim   45  2011 
jerry   25  2011 
zack   124  2011 
jeff   45  2011 
tom   62  2012 
jim   214  2012 
jerry   13  2012 
zack   32  2012 
arnold   4  2012 




Name  Points Year 
------- ------- 
tom   8  2011 
jim   45  2011 
jerry   25  2011 
zack   124  2011 
jeff   45  2011 
arnold  NULL  NULL 

Я понял, что это будет легко, но я изо всех сил пытаюсь заставить его работать.

+0

Что означает «имена для определенного года»? Что означает «имя не входит в этот год»? Каковы эти две таблицы? Мы можем догадаться, но, пожалуйста, объясните более четко. Как вы можете рассчитывать на себя в SQL, если не можете четко выразить себя на естественном языке? – philipxy

ответ

2

Из ваших объяснений, я думаю, вам потребность могли бы использовать что-то вроде этого:

SELECT DISTINCT 
    N.`Name`, 
    D.`Points`, 
    Y.`Year` 
FROM 
    `MyData` Y 
LEFT JOIN (SELECT DISTINCT `Name` FROM `MyData`) N ON 1=1 
LEFT JOIN `MyData` D 
    ON D.`Year` = Y.`Year` 
    AND D.`Name` = N.`Name` 
ORDER BY 
    Y.`Year` 

Хотя это не очень, Это, кажется, работает как задумано:

enter image description here