Создание запроса SQL, который выбирает конкретную запись c в таблице - PullRequest
1 голос
/ 26 февраля 2020

У меня есть таблица с оценками, которая имеет 4 столбца: ID, математика, наука и история .

Я хочу создать запрос sql, который выбирает из таблица "оценки" указанная запись c, где "ID" равен переменной . Эта переменная меняется каждый раз при запуске программы. То, что я пробовал до сих пор, но не работает, это:

"SELECT * FROM grades Where ID LIKE %" + IDString + "%"

"SELECT * FROM grades Where ID LIKE %IDString%"

"SELECT * FROM grades Where ID LIKE 'IDString'"

Примечание: IDString является строковой переменной. Примечание: я использую Java и Sqlite.

String IDString = "12345";
ResultSet rs = connection.createStatement().executeQuery("SELECT * FROM grades Where ID LIKE '%' || IDString || '%' ");

этот код должен прояснить мою проблему.

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

Ваши собственные примеры неверны, потому что шаблон литерал должен быть заключен в одинарные кавычки. Символы шаблона, такие как% или _, будут внутри литерала:

    SELECT * FROM grades Where ID LIKE '%IDString%'

Если вы хотите подставить значение в "pure MySQL", поместите символы шаблона в переменную, но не в тело запроса:

    SET @pattern = CONCAT('%', @var, '%');

    SELECT * FROM grades WHERE ID LIKE @pattern;

https://www.db-fiddle.com/f/vr13gVV19CTcR1kbgohS34/0

То же самое для PHP или других «внешних» языков. Вы можете использовать подготовленный оператор со значением, которое уже содержит символы шаблона. Примерно так:

    $sth = $dbh->prepare("SELECT * FROM grades WHERE ID LIKE ?");
    $sth->execute('%' . $var . '%'));
    $result = $sth->fetchAll();
1 голос
/ 26 февраля 2020

Используйте функцию concat для объединения переменных и строк.

SELECT * FROM mytable Where col2 LIKE CONCAT('%', @start, '%')

или в вашем случае:

SELECT * FROM grades Where ID LIKE CONCAT('%', @IDString, '%')

Вот небольшая демонстрация

В SQLite это будет выглядеть так:

SELECT * FROM grades Where ID LIKE '%' || @IDString || '%'

Но в SQLite вы не можете использовать переменные. Это необходимо сделать в вашей Java части кода.

При отправке запроса с JAVA вы можете сделать это следующим образом:

"SELECT * FROM grades Where ID LIKE '%' ||" + IDString + "|| '%' "
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...