Удалить первый символ из идентификатора - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь сделать SQL-запрос с JOIN, но у меня есть поле, в котором идентификатор содержит букву в первой позиции.Мне нужно пропустить это, когда я делаю запрос.Значение столбца service равно идентификатору tbl2 без символа 'S').

Вот таблица:

tbl1

-------------------
| id    | service |
-------------------
| 58186 | S83968  |
| ...   | ...     |

tbl2

-------------------
| id    | domain  |
-------------------
| 83968 | serv123 |
| ...   | ...     |

Что я пробовал:

SELECT `domain` 
FROM `tbl2` 
INNER JOIN `tbl1`  
WHERE tbl2.id = tbl1.SUBSTR(service, 2)
AND id = '58186';

Возвращается ошибка:

. # 1630 - ФУНКЦИЯ tbl1.SUBSTR не существует.Ознакомьтесь с разделом «Разбор и разрешение имени функции» в Справочном руководстве

Ожидаемый результат:

-----------
| domain  |
-----------
| serv123 |

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Я на самом деле предпочитаю добавить 'S' к другому идентификатору:

SELECT tbl2.`domain` 
FROM `tbl2` INNER JOIN
     `tbl1`  
     ON CONCAT('S', tbl2.id) = tbl1.service
WHERE tbl1.id = '58186';

Это может показаться небольшим нюансом.Однако в некоторых случаях tbl2.id может быть числом.Из-за правил преобразования могут быть ситуации, когда вы получаете ошибку преобразования типа (в некоторых базах данных) или неожиданные результаты (в MySQL), если какие-либо (не совпадающие) значения в service не могут быть преобразованы в число.

0 голосов
/ 21 декабря 2018

Вы можете попробовать ниже - вам нужно добавить SUBSTR(tbl1.service, 2), а не tbl1.SUBSTR(service, 2)

  SELECT `domain` 
    FROM `tbl2` 
    INNER JOIN `tbl1`  
    WHERE tbl2.id = SUBSTR(tbl1.service, 2)
    AND tbl1.id = '58186'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...