首页 > 解决方案 > PostgreSQL 通过连接表中的子字符串查询返回部分值

问题描述

我正在尝试编写一个连接查询来通过某个子字符串搜索某个列

我有 3 张桌子:

SELECT PE.* FROM SCHEMA.PERIPHERAL_TYPE AS PE

    left JOIN SCHEMA.TENANT_PERIPHERAL_TYPE AS TPT ON (PE.PERIPHERAL_TYPE_ID = TPT.PERIPHERAL_TYPE_ID)
    left JOIN SCHEMA.TENANT AS T ON (TPT.TENANT_ID = T.TENANT_ID)

    where
    LOWER(CAST (T.TENANT_NAME AS TEXT)) LIKE '%%'AND 
    LOWER(CAST (PE.PERIPHERAL_TYPE_ID AS TEXT)) LIKE '%%' AND
    LOWER(CAST (PE.DEVICE_TYPE AS TEXT)) LIKE '%%' AND
    LOWER(CAST (PE.PERIPHERAL_TYPE_NAME AS TEXT)) LIKE '%%' AND
    LOWER(CAST (PE.PERIPHERAL_TYPE_BRAND AS TEXT)) LIKE '%%' AND
    LOWER(CAST (PE.PERIPHERAL_TYPE_MODEL AS TEXT)) LIKE '%%' AND
    LOWER(CAST (PE.PERIPHERAL_TYPE_DESC AS TEXT)) LIKE '%%' AND
    TO_CHAR(PE.CREATED_DATE, 'YYYY-MM-DD HH24:MI:SS.MS') LIKE '%%' AND
    TO_CHAR(PE.LAST_MODIFIED_DATE, 'YYYY-MM-DD HH24:MI:SS.MS') LIKE '%%' )

这是我的数据库: TENANT TENANT_PERIPHERAL_TYPE PERIPHERAL_TYPE ====== ====================== ================ id: 1 name: ss [tenantId: 1, peripheral_type_id 1 ] [peripheral_type_id: 1, ...] [peripheral_type_id: 2, ...] [peripheral_type_id: 3, ...]

如果我为TENANT_NAME列提供值,则此查询可以正常工作,例如%name%. 我只得到匹配的peripheral types

但是当我不提供任何值时(就像您在上面的查询中看到的那样),我只能获得TENANT_PERIPHERAL_TYPE中可用的记录,但我想从PERIPHERAL_TYPE中获取所有值

我错过了什么,我该如何解决我的问题?

谢谢!

标签: sqlpostgresqljoinleft-join

解决方案


推荐阅读