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 用于比较数字序列的连接条件语法_Sql_Sqlite - Fatal编程技术网

Sql 用于比较数字序列的连接条件语法

Sql 用于比较数字序列的连接条件语法,sql,sqlite,Sql,Sqlite,我有两个表,其中一个表有一个2位数的customerIdinteger列,另一个表有一个transactionIdinteger列。transactionId列的第二位和第三位数字对应于customerIds。我想通过“匹配”transactionId和customerId作为联接条件,对这两个表执行联接。差不多 customerId像'\u transactionId% 这可能吗?您的想法是正确的: on transactionId like concat('_', customerId, %

我有两个表,其中一个表有一个2位数的
customerId
integer列,另一个表有一个
transactionId
integer列。
transactionId
列的第二位和第三位数字对应于
customerId
s。我想通过“匹配”
transactionId
customerId
作为联接条件,对这两个表执行联接。差不多

customerId像'\u transactionId%


这可能吗?

您的想法是正确的:

on transactionId like concat('_', customerId, %)
或者,您可以使用
substr()


但是,您可能应该修复您的数据结构,以便事务有一个客户id的显式列。这将有助于加快连接。而且,当您开始获得超过99个客户时,您的数据结构将适应。

这些字段是什么数据类型?您对
的使用是否与
类似,意味着这些实际上是恰好包含整数的VARCHAR字段?或者它们实际上是INT数据类型?这是否需要快速完成,或者只是一次完成,速度很慢,但编码很简单?您能够修改模式吗?(您的描述意味着应该有一个至少由两个字段组成的复合键,而不是一个包含多个值的字段)它们是整数,但可以修改为VARCHAR。将这些作为VARCHAR创建表会提高效率吗?也就是说,当我们使用LIKE时,INT数据类型是否将case转换为VARCHAR类型?在这种非常特殊的情况下,您可能会看到使用VARCHAR而不是INT的好处。这是因为它们确实必须隐式强制为VARCHAR,以便LIKE运算符对其进行操作,这种强制禁止数据库引擎使用任何索引。如果它们是VARCHAR,那么您可以在(CONCAT('0',customerId)、CONCAT('1',customerId)、CONCAT('2',customerId)、…CONCAT('9',customerId))中使用类似于
的事务ID。但这是对弱设计模式的优化。更好的设计模式是跨多个字段存储TransactionID(其中一个字段是TransactionID的CustomerID部分),而不是将CustomerID嵌入TransactionID字段。然后你会得到很多好处;您可以设置外键约束,以便所有此类记录都必须指向有效的客户,您可以将CustomerID与任何其他字段分开索引,您可以将ID保留为整数,而不必考虑反常的连接条件,您不必限制为00..99个客户,等等。如果可以的话,您将进行两次投票;答案很有帮助,建议设计有缺陷,以及如何解决这些缺陷。我认为应该颠倒过来:
关于交易ID,比如concat(“,”customerId“,”)
@valex。非常感谢。无论如何,我更喜欢第二个公式。
on customerId = substr(transactionId, 2, 2)