我使用的Oracle 11gR2,我试着写两个表中返回地址数据的查询,CUSTOMERS和LOCATIONS.给定客户可能(或可能不)具有不同的位置,每个位置具有其自己的地址.
我想为每位客户及其所有位置返回地址.例如,如果表包含如下数据:
顾客
CUSTOMER_ID地址
1"纽约"
2"加州"
地点
CUSTOMER_ID LOCATION_ID地址
1 1"新泽西"
然后我希望结果看起来像:
CUSTOMER_ID LOCATION_ID地址 1"纽约" 1 1"新泽西" 2"加州"
我的第一个想法是这样的:
SELECT
CUSTOMERS.CUSTOMER_ID,
LOCATIONS.LOCATION_ID,
NVL(LOCATIONS.ADDRESS,CUSTOMERS.ADDRESS) ADDRESS
FROM
CUSTOMERS
LEFT JOIN
LOCATIONS ON (CUSTOMERS.CUSTOMER_ID=LOCATIONS.CUSTOMER_ID)
Run Code Online (Sandbox Code Playgroud)
问题在于,当客户确实有位置时,它不返回具有位值数据的空值的行,因此我没有得到CUSTOMERS表中包含地址的行.它给了我这样的东西:
CUSTOMER_ID LOCATION_ID地址 1 1"新泽西" 2"加州"
它错过了New York地址customer 1.我试过这个......
SELECT
CUSTOMERS.CUSTOMER_ID,
LOCATIONS.LOCATION_ID,
NVL(LOCATIONS.ADDRESS,CUSTOMERS.ADDRESS) ADDRESS
FROM
CUSTOMERS
LEFT JOIN
LOCATIONS ON (CUSTOMERS.CUSTOMER_ID=LOCATIONS.CUSTOMER_ID OR LOCATIONS.CUSTOMER_ID IS NULL)
Run Code Online (Sandbox Code Playgroud)
但它给了我与第一个查询相同的结果.有没有办法返回第二个表的空记录,即使连接条件匹配?
我正在尝试使用以下ZPL和Zebra ZP 450打印机在标签上打印Code 128条形码:
^BY3^BCN,112,N^FO090,660^FD>;>89102100^FS
Run Code Online (Sandbox Code Playgroud)
我期待条形码扫描为"9102100".但是,当我扫描打印的条形码时,它显示为"910210" - 切断最后一位数字.
如果我更改了最后一位数字,它仍然会被切断.但如果我在末尾添加更多数字,例如"9102100357",则条形码正确读取为"9102100357".
为什么我在这种特殊情况下"失去"一个数字?
我有一个表包含一个名为COMMANDS的VARCHAR2列.
此列中的数据是一堆难以阅读的ZPL代码,将被发送到标签打印机,在ZPL中,有几个标记形式为{TABLE.COLUMN}.
我想在COMMANDS中找到所有不同的{TABLE.COLUMN}令牌的好列表.我编写了以下正则表达式来匹配令牌格式:
SELECT REGEXP_SUBSTR(COMMANDS,'\{\w+\.\w+\}') FROM MYTABLE;
Run Code Online (Sandbox Code Playgroud)
正则表达式有效,但它只返回每行第一个匹配的标记.有没有办法返回每一行的所有正则表达式匹配?
我正在使用Oracle 11GR2.
编辑 - 以下是单行数据的一小部分 - 每行中有许多这样的行:
^FO360,065^AEN,25,10^FD{CUSTOMERS.CUST_NAME}^FS
^FO360,095^AAN,15,12^FD{CUSTOMERS.CUST_ADDR1}^FS
Run Code Online (Sandbox Code Playgroud)
所以如果这是表中唯一的一行,我想回复:
{CUSTOMERS.CUST_NAME}
{CUSTOMERS.CUST_ADDR1}
Run Code Online (Sandbox Code Playgroud)