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
Mysql 来自另一个表和WildCharacters的类似SQL的值_Mysql_Sql_Sql Server - Fatal编程技术网

Mysql 来自另一个表和WildCharacters的类似SQL的值

Mysql 来自另一个表和WildCharacters的类似SQL的值,mysql,sql,sql-server,Mysql,Sql,Sql Server,我有两个表,表test的NDC_10的值是10位代码,而表product中的PRODUCTNDC的值是8位代码。我正在尝试选择8位代码位于10位代码内的所有行,例如: 0123456789=10位 12345678=8位 我在逻辑上提出了类似的想法,但我不知道如何在另一个表的搜索中嵌套这两个通配符 select NDC_10 FROM test, product WHERE (NDC_10 LIKE '_product.PRODUCTNDC_') 类似搜索的通配符为%。因此,如果我想获取包含您

我有两个表,表test的NDC_10的值是10位代码,而表product中的PRODUCTNDC的值是8位代码。我正在尝试选择8位代码位于10位代码内的所有行,例如: 0123456789=10位 12345678=8位

我在逻辑上提出了类似的想法,但我不知道如何在另一个表的搜索中嵌套这两个通配符

select NDC_10
FROM test, product
WHERE (NDC_10 LIKE '_product.PRODUCTNDC_')

类似搜索的通配符为
%
。因此,如果我想获取包含您的8位代码的所有记录,我会这样做:

SELECT NDC_10
FROM test, product
WHERE NDC_10 LIKE '%12345678%'
如果我只想要以8位代码开头的,那么这将起作用:

SELECT NDC_10
FROM test, product
WHERE NDC_10 LIKE '12345678%'
如果我只想要以相同的8位数结尾的记录:

SELECT NDC_10
FROM test, product
WHERE NDC_10 LIKE '%12345678'
希望这能回答你的问题

如果要跨联接执行此操作,请尝试以下操作:

SELECT test.NDC_10
FROM test
    INNER JOIN product ON test.NDC_10 LIKE '%' + product.PRODUCTNDC + '%'
选择t.NDC_10,p.NDC_8
来自测试t
内部连接产品p ON(定位(p.NDC_8,t.NDC_10)0)
请参阅:
以及:

永远不要使用隐式连接语法,它是一种反模式。

原因是交叉连接太容易了,在99,99%的情况下,交叉连接不是您想要的

我不完全确定你在问什么,但也许你是想加入?我只需要当product.PRODUCTNDC中的8位代码位于NDC_10 from digit中,前面有一个字符,后面有一个behing(给你10位而不是8位,所以只有当8位代码嵌套在10位中时才加入)。我猜“%”product.PRODUCTNDC+“%”是正确的,但它只给了我一个1064语法错误。看起来像是从testt中选择NDC_10,其中NDC_10像CONCAT(“%”,product.PRODUCTNDC,“%”)起作用,感谢帮助-1使用隐式联接。因为您没有指定联接条件,所以您进行了交叉联接。这将比需要的慢得多。此外,隐式连接本身就是一种反模式。那么有什么更好的建议?@chrstahl89,使用显式连接并声明连接条件,这将大大减少考虑中的行数,加快查询速度。现在,如果两个表都有1000行,MySQL将在一个临时表中生成(1000 x 1000=100万行),并对该临时表执行类似于的搜索。速度仍然很慢,但我认为这与我正在检查80k行到260k行这一事实有关。谢谢你的帮助和资源。
select t.NDC_10, p.NDC_8
FROM test t
INNER JOIN product p ON (LOCATE(p.NDC_8,t.NDC_10) <> 0)