Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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_String_Join_Left Join_Varchar - Fatal编程技术网

常规:在SQL中对字符串执行左连接

常规:在SQL中对字符串执行左连接,sql,string,join,left-join,varchar,Sql,String,Join,Left Join,Varchar,我有两个表,两个表都有一个患者标识符,即字符串(数字和字母的组合)。 是否有方法将患者标识符上的两个表连接起来?或者我需要一个int患者标识符来联接这两个表吗?您可以联接任何支持SQL的数据库中的任何布尔表达式。表达式甚至不需要相等——尽管相等联接的性能往往比其他类型的联接要好得多 您完全可以在字符串上进行连接,查询将相当有效 出于实际原因,通常首选整数: 它们往往更小(4字节),因此在多个表中重复时效率更高 它们是固定长度的,这使得索引稍微更有效(尽管患者ID也可能具有固定长度) 字符串可能

我有两个表,两个表都有一个患者标识符,即字符串(数字和字母的组合)。 是否有方法将患者标识符上的两个表连接起来?或者我需要一个int患者标识符来联接这两个表吗?

您可以联接任何支持SQL的数据库中的任何布尔表达式。表达式甚至不需要相等——尽管相等联接的性能往往比其他类型的联接要好得多

您完全可以在字符串上进行连接,查询将相当有效

出于实际原因,通常首选整数:

  • 它们往往更小(4字节),因此在多个表中重复时效率更高
  • 它们是固定长度的,这使得索引稍微更有效(尽管患者ID也可能具有固定长度)
  • 字符串可能存在大小写和排序问题
  • 字符串可能有隐私问题
最后一个问题可能是数据库中最重要的问题。如果你想要一个隐藏实际病人数的内部ID,你可能想考虑一下。


但是,从SQL的角度来看,使用字符串作为主键、外键和连接键是完全正确的。

您使用的是什么RDBMS?请给出一些示例数据/结构。我认为大多数RDBMS都支持在string/char/varchar列上进行连接,因此您只需要从tbl1中
在tbl1上连接tbl2。patientId=tbl2。patientId
您应该尝试在DB上进行连接。这将很容易和快速地知道它是否有效。如果您的SQL查询有问题,请编辑并将其放入问题中,以便我们提供帮助。