クエリ:
SELECT nummer
FROM tabell_med_nummer
WHERE SUBSTR(nummer, -1) = 0
このクエリは、「0」で終わるテーブル tabell_med_nummer 内の数値を選択します。たとえば、1000、1010、1020 は選択されますが、1001、1002 などは選択されません。
これに基づいて範囲を取得する必要があります。たとえば、1000 ~ 1100、または 1010 ~ 1023 です。範囲のサイズは可変です。何で終わるかは重要ではありませんが、1010 のように「0」で終わる数字を選択する必要があります。
注意が必要なのは、テーブルにすべての数値が存在するわけではないということです。したがって、テーブルに 1004 が存在しない場合は、100 の範囲が必要です。1000 から開始することはできません。
これを解決する方法を知っている人はいますか?
リクエストに応じて:
+----+-------------+-------+-------+-------------------------------+---------------+---------+------+------+---------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+-------------------------------+---------------+---------+------+------+---------------------------------+
| 1 | SIMPLE | f | ALL | NULL | NULL | NULL | NULL | 19 | Using temporary; Using filesort |
| 1 | SIMPLE | t2 | index | telefonnummer,telefonnummer_2 | telefonnummer | 5 | NULL | 1001 | Using index; Using join buffer |
| 1 | SIMPLE | p | ALL | NULL | NULL | NULL | NULL | 4568 | Using where; Using join buffer |
| 1 | SIMPLE | t3 | index | telefonnummer,telefonnummer_2 | telefonnummer | 5 | NULL | 1001 | Using index; Using join buffer |
| 1 | SIMPLE | t1 | ALL | telefonnummer,telefonnummer_2 | NULL | NULL | NULL | 1001 | Using where; Using join buffer |
+----+-------------+-------+-------+-------------------------------+---------------+---------+------+------+---------------------------------+
5 rows in set (0.00 sec)
テーブル名とフィールド名をいくつか変更し、いくつかの結合と where ステートメントを追加しました。
SELECT t1.telefonnummer start, t2.telefonnummer end, t1.kundenummer kundenummer, t1.fornavn fornavn, t1.etternavn etternavn, t1.bedriftsnavn bedriftsnavn, t1.organisasjonsnummer organisasjonsnummer, t1.partnerID partnerID
FROM TELEFONNUMMERTILDELING t1
JOIN TELEFONNUMMERTILDELING t2
ON t1.telefonnummer % 10 = 0
AND t1.telefonnummer <= t2.telefonnummer
JOIN TELEFONNUMMERTILDELING t3
ON t3.telefonnummer BETWEEN t1.telefonnummer AND t2.telefonnummer
JOIN TELEFONNUMMERTILDELING_POSTNUMMER p
ON p.postnummer = 4085
JOIN TELEFONNUMMERTILDELING_FYLKE f
ON f.ID = p.fylkeID GROUP BY start, end
HAVING end - start + 1 = COUNT(*)
AND end - start + 1 = 50
AND (kundenummer IS NULL OR kundenummer = '')
AND (fornavn IS NULL OR fornavn = '')
AND (etternavn IS NULL OR etternavn = '')
AND (bedriftsnavn IS NULL OR bedriftsnavn = '')
AND (organisasjonsnummer IS NULL OR organisasjonsnummer = '')
AND partnerID = 1001