sql中如何检索‘[’

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql中如何检索‘[’相关的知识,希望对你有一定的参考价值。

use stmodel
select * from ICD10疾病编码及疾病名称
where 疾病名称 like '%[%]%'
这是我写的代码,要检索记录中包含[]的记录,比如小样儿[母亲分娩],但是却无法返回检索结果,可以肯定的是记录中存在[],请问该怎么办,是什么原因导致的

like '%[[]%'

参考资料:

http://stackoverflow.com/questions/3661125/sql-server-like-containing-bracket-characters

参考技术A SELECT 'OK' WHERE '[' LIKE '[[]%'

SQL如何从每个连接表中检索最新结果

【中文标题】SQL如何从每个连接表中检索最新结果【英文标题】:SQL how to retrieve latest result from each joined table 【发布时间】:2020-08-17 02:43:09 【问题描述】:

我想通过每个组 (productToken) 的 MAX(ID) 来从所有连接的表中检索一个包含最新行的大型产品表,该组具有唯一的产品名称。连接表是 - 产品(商店)、可用性(状态)、描述(产品)和产品价格。所有这些都包含唯一的 productToken 并且可以通过添加新记录(独立地)随着时间的推移更改提到的表,所以我的目标是通过从每个表中检索最新记录来组成一个大表(包含有关产品的实际信息)。我的代码是这样的。第一个添加的产品运行良好,但是在向任何表添加新记录后事情变得奇怪了(查询没有检索到结果)。

SELECT *
FROM products
JOIN productsStore ON products.productToken = productStore.productToken
JOIN productsStatus ON products.productToken = productsStatus.productToken
JOIN productsPrice ON products.produstToken = productsPrice.productToken
JOIN categories ON products.categoryToken = categories.categoryToken
WHERE products.shopToken = '$shopToken' 
    AND products.productID IN 
        (SELECT MAX(productID) 
        FROM products 
        GROUP BY productToken)
    AND productsPrice.productPriceID IN 
        (SELECT MAX(productPriceID) 
        FROM productsPrice
        GROUP BY produktToken)
    AND productsStatus.productStatusID IN 
        (SELECT MAX(productStatusID) 
        FROM productsStatus
        GROUP BY productToken)
    AND produktyStore.productStoreID IN 
        (SELECT MAX(productStoreID) 
        FROM productsStore
        GROUP BY productToken)
    AND categories.categoryID IN 
        (SELECT MAX(categoryID) 
        FROM categories
        GROUP BY categoryToken)
ORDER BY categories.categoryID DESC

【问题讨论】:

更新您的问题添加适当的数据样本和预期结果 你运行的是哪个版本的 MySQL? @Rudi:您最新的编辑使原始查询绝对不可读。我把它滚了回来。随意再次继续,但不要删除查询,否则您的问题将变得无法理解和回答。 @GMB 实际上是 10.3.21-MariaDB @Rudi:好的-所以我的回答中使用row_number() 的第二个查询也应该有效。 【参考方案1】:

我想从所有连接的表中检索一个包含最新行的大型产品表

我认为您希望where 子句中的相关子查询的相等条件而不是聚合查询的in 条件。这使您可以使用给定 productToken 的“最新”记录过滤每个连接表。

SELECT *
FROM products p
JOIN productsStore  psr ON psr.productToken = p.productToken
JOIN productsStatus psu ON psu.productToken = p.productToken
JOIN productsPrice  ppr ON ppr.produstToken = p.productToken
JOIN categories     c   ON c.categoryToken  = p.categoryToken
WHERE 
    p.shopToken = '$shopToken' 
    AND p.productID         = (SELECT MAX(p1.productID)         FROM products      p1   WHERE p1.productToken   = p.productToken)
    AND psr.productStoreID  = (SELECT MAX(psr1.productStoreID)  FROM productsStore psr1 WHERE psr1.productToken = p.productToken)
    AND psu.productStatusID = (SELECT MAX(psu1.productStatusID) FROM productStatus psu1 WHERE psu1.productToken = p.productToken)
    AND ppr.productPriceID  = (SELECT MAX(ppr1.productPriceID)  FROM productsPrice ppr1 WHERE ppr1.productToken = p.productToken)
    AND c.categoryID        = (SELECT MAX(c1.categoryID)        FROM category      c1   WHERE c1.productToken   = p.productToken)

如果您运行的是 MySQL 8.0(或 MariaDB 10.3 或更高版本),则可以在子查询中使用 ROW_NUMBER()

SELECT *
FROM (
    SELECT p.*, ROW_NUMBER() OVER(PARTITION BY productToken ORDER BY productID DESC) rn
    FROM products p
) p
INNER JOIN (
    SELECT psr.*, ROW_NUMBER() OVER(PARTITION BY productToken ORDER BY productStoreID DESC) rn
    FROM productsStore psr
) psr ON psr.productToken = p.productToken AND psr.rn = 1
INNER JOIN (
    SELECT psu.*, ROW_NUMBER() OVER(PARTITION BY productToken ORDER BY productStatusID DESC) rn
    FROM productsStatus psu
) psu ON psu.productToken = p.productToken AND psu.rn = 1
INNER JOIN (
    SELECT ppr.*, ROW_NUMBER() OVER(PARTITION BY productToken ORDER BY productsPriceID DESC) rn
    FROM productsPrice ppr
) ppr ON ppr.productToken = p.productToken AND ppr.rn = 1
INNER JOIN (
    SELECT c.*, ROW_NUMBER() OVER(PARTITION BY productToken ORDER BY categoryID DESC) rn
    FROM categories c
) c ON c.productToken = p.productToken AND c.rn = 1
WHERE p.shopToken = '$shopToken' AND p.rn = 1

【讨论】:

非常感谢,但它并没有解决我的问题 - 结果仍然是空的,还有一个问题,您是否使用任何生成器生成代码? - 看起来又漂亮又干净 @Rudi:如果您在WHERE 子句(仅此而已)中运行第一个查询,您是否会返回一些行? WHERE p.shopToken = '$shopToken' 是的,SELECT * FROM products p WHERE p.shopToken = '$shopToken',工作正常 @Rudi:不,我的意思是所有的连接,但有简化的WHERE 子句。 哦,是的,我明白了.. 现在我已经测试了简化版本,是的,它检索了所有连接的行

以上是关于sql中如何检索‘[’的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL 中检索 PL/SQL 记录类型? [复制]

如何提高sql2000全文检索搜索效率

如何使用 JCR 中的 SQL 从子名称中检索父名称

如何将 SQL 表中的所有行检索到数组中?

SQL如何从每个连接表中检索最新结果

如何从 SQL Server 中检索数据?