SQL查询。不寻常的加入。在sqlite-3中实现的数据库

这实际上是一个关于构建SQL查询的问题。数据库是用sqlite3" title="sqlite3">sqlite3实现的。我是一个相对较新的SQL用户。SQL查询。不寻常的加入。在sqlite-3中实现的数据库

我有两个表,并希望以不寻常的方式加入他们。以下是解释问题的示例。

表1(T1):

id year name 

-------------------------

297 2010 Charles

298 2011 David

300 2010 Peter

301 2011 Richard

表2(T2)

id year food 

---------------------------

296 2009 Bananas

296 2011 Bananas

297 2009 Melon

297 2010 Coffee

297 2012 Cheese

298 2007 Sugar

298 2008 Cereal

298 2012 Chocolate

299 2000 Peas

300 2007 Barley

300 2011 Beans

300 2012 Chickpeas

301 2010 Watermelon

我想加入的ID和年中的表格。值得注意的是(1)id必须完全匹配,但如果表1中的年份表2中没有完全匹配,那么我想选择下一个(较低)可用的年份。该类型的选择,我想生产将给出的结果

id year matchyr name food 

-------------------------------------------------

297 2010 2010 Charles Coffee

298 2011 2008 David Cereal

300 2010 2007 Peter Barley

301 2011 2010 Richard Watermelon

总之,ID = 297必须为年= 2010表1中给出的精确匹配,所以ID = 297对应的线路,从表2中选择2010年= 2010年.id = 298,year = 2011在表2中没有匹配的年份,因此选择下一个可用年份(小于2011年)。正如你所看到的,我也想知道这一年匹配的年份(无论是确切的还是不准确的)。我会非常感谢(1)一个迹象表明(是/否回答)是否可以在SQL中单独执行,或者我是否需要查看SQL以外的内容,以及(2)解决方案,如果是不太繁重。

回答:

当然,你可以在SQL中做到这一点。第一步需要的是一个查询,它将id和t1和t2连接起来,并为您提供了各种可能的年份(编辑:修正了这个句子,原来的句子也包含了下一步)。您可以按如下创建一个名为T3视图,让你这一点:

CREATE VIEW [t3] AS SELECT t1.id as id, t2.year as year FROM t1 INNER JOIN t2 ON (t1.id = t2.id AND T2.year <= t1.year)

从这里,你会想每个ID从T3获得最大的一年:

CREATE VIEW [t4] AS SELECT id, MAX(year) FROM t3 GROUP BY id

你应该可以将t4连接回t1和t2以获得您想要的。当然,有办法缩短这一点,但它应该让你沿着正确的路线思考。另外,我猜这只是一个例子,但请不要打电话给你的表格t1,t2等。

以上是 SQL查询。不寻常的加入。在sqlite-3中实现的数据库 的全部内容, 来源链接: utcz.com/qa/260064.html

回到顶部