这是我的客户要求调整现有 Perl 脚本的请求。然而,让我感到困惑的是他们的实际数据库结构。
要求看起来很简单:
only pull records where _X begins with 1, 2, or 9.
但是,底层数据库并不是那么简单,这是他们 DBA 的指导方针:
"_X 是自定义元数据字段。数据库将此数据存储在 customData 表中的行中,而不是列中。为了以有效的方式查询自定义数据表,您需要知道从中获取的自定义字段的 Field_ID字段定义表:
SELECT Field_ID FROM FieldDef WHERE Name = "_X";
This returns:
10012
“现在您可以查询CustomData。例如:
SELECT Record_ID FROM CustomData where Field_ID="10012" AND StringValue="2012-04";
他还建议,就我而言,可能是:
"SELECT Record_ID FROM CustomData where Field_ID="10012" AND (StringValue LIKE '1%' || StringValue LIKE '2%' || StringValue LIKE '9%')
奇怪的是,现有的 Perl 脚本不包含像“Select Record_ID FROM”这样的东西,而是像“SELECT StringValue FROM”一样。
所以这就是为什么我在这里很困惑:什么是“存储在行中,而不是列中”?为什么先查询 Field_ID 表再查询 CustomData?这个周末我将无法与他们中的任何人交流,但真的希望对整个事情有所了解,希望专家可以帮助我整理整个结构。
更多信息(表架构):
现有的perl脚本:(关注第72-136行)
提前致谢。