【问题标题】:Help with SQLite (Join tables with subquery)SQLite 帮助(使用子查询连接表)
【发布时间】:2011-05-17 12:59:55
【问题描述】:

伙计们,我要被这个发疯了...... 我有两张桌子:

1. UniquePrefixes
2. Operator

UniquePrefixes 仅包含“前缀”字段。 示例:

Prefix
------
1
12
123
12345

“操作员”表有很多数据,包括“前缀”字段。 示例:

..... Prefix ......
----- ------ ------
      1
      12

我想要实现的是:

(pseudo)

foreach unique 'prefix'
select the 'Prefix' from 'Operator' if is equal to a unique 'prefix'
OR
select the 'closest' match that fits into that

例子:

unique prefix = 1 (exists on 'Operator' so I am fine)
unique prefix = 12345 (doesnt exist on 'Operator' so I must get '12')

到目前为止我所做的是:

SELECT
    *
FROM
    UniquePrefixes
LEFT OUTER JOIN Operator
on 
    Operator.Prefix =(
        SELECT
            Operator.Prefix
        FROM
            Operator,
            UniquePrefixes
        WHERE
            length(Operator.Prefix)<= UniquePrefixes.prefix
        AND UniquePrefixes.prefix LIKE(
            Operator.Prefix || '%'
        )
        ORDER BY
            Operator.Prefix DESC
        LIMIT 1
    )

但它不起作用,因为子选择首先执行(显然):(

我希望这是有道理的,并且非常感谢任何帮助

【问题讨论】:

    标签: sqlite match subquery closest


    【解决方案1】:
        SELECT UniquePrefixes.Prefix, Operator.Prefix
          FROM UniquePrefixes
     LEFT JOIN Operator ON UniquePrefixes.Prefix LIKE Operator.Prefix || '%'
                       AND length(Operator.Prefix) <= length(UniquePrefixes.prefix)
         ORDER BY length(Operator.Prefix) desc
    

    【讨论】:

      猜你喜欢
      • 2012-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 2011-03-23
      相关资源
      最近更新 更多