Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询。不寻常的结合。数据库在sqlite-3中实现_Sql_Sqlite - Fatal编程技术网

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

SQL查询。不寻常的结合。数据库在sqlite-3中实现,sql,sqlite,Sql,Sqlite,这本质上是一个关于构造SQL查询的问题。数据库是用sqlite3实现的。我是一个相对较新的SQL用户 我有两张桌子,想以一种不同寻常的方式把它们连接起来。下面是一个例子来解释这个问题 表1(t1): 表2(t2) 我想加入id和年份的表格。问题是(1)id必须精确匹配,但是如果表2中没有表1中年份的精确匹配,那么我想选择下一个(较低)可用年份。选择我想要产生的类型将得到以下结果 id year matchyr name food --------------------------

这本质上是一个关于构造SQL查询的问题。数据库是用sqlite3实现的。我是一个相对较新的SQL用户

我有两张桌子,想以一种不同寻常的方式把它们连接起来。下面是一个例子来解释这个问题

表1(t1):

表2(t2)

我想加入id和年份的表格。问题是(1)id必须精确匹配,但是如果表2中没有表1中年份的精确匹配,那么我想选择下一个(较低)可用年份。选择我想要产生的类型将得到以下结果

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与表1中给出的2010年完全匹配,因此id=297,2010年的对应行从表2中选择。id=298,year=2011在表2中没有匹配的年份,因此选择下一个可用年份(小于2011年)。正如你们所看到的,我也想知道那个匹配的年份(无论是准确的,还是不准确的)实际上是什么


我非常希望(1)说明(是/否)这是否可以单独在SQL中实现,或者我是否需要查看SQL外部,以及(2)解决方案(如果不太繁重)。

当然,您可以在SQL中实现这一点。第一步需要的是一个查询,它在id上连接t1和t2,并提供各种可能的年份(编辑:修复了这句话,原来的一句话也包含了下一步)。您可以创建一个名为t3的视图,该视图提供以下信息:

将视图[t3]创建为

选择t1.id作为id,t2.year作为从t1内部连接t2开始的年份(t1.id=t2.id和t2.year非常感谢您一直以来的回答。直到现在我发现了有关StackOverflow的工作原理,我才知道如何接受答案并给予您信任!您的回答帮了大忙。@user02814谢谢,很高兴您发现它很有帮助。如果您对获得足够好的回答,您也可以将其标记为已接受(这是表示它解决了您的问题的标准方式)。有关更多信息,请参阅!
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  year    matchyr name    food
-------------------------------------------------
297 2010    2010    Charles Coffee
298 2011    2008    David   Cereal
300 2010    2007    Peter   Barley
301 2011    2010    Richard Watermelon