Почему этот оператор SQL не работает?

SELECT * FROM table1, table2
WHERE table1.user_id = table2.id
AND table1.content = news
AND table1.content_id = 1

это не сработает. не может у вас есть два «И» в выражении sql ??

// Томек

-1 за расплывчатое название, а не в форме вопроса. Недостаточно описания ошибки.

Jeff Martin 14.01.2009 23:10

Это правильный вопрос, просто плохо сформулированный. Вместо того, чтобы голосовать против, почему бы не отредактировать вопрос, чтобы его было немного легче понять?

Robert S. 14.01.2009 23:12

Не все могут редактировать вопросы - так что отрицательный голос - это все, что у нас есть - к тому же это действительно неубедительный вопрос.

DJ. 14.01.2009 23:17

@Out In Space - я предполагаю, что ему трудно редактировать вопросы без необходимой репутации.

Ben Blank 14.01.2009 23:18

@Out Into Space, да, это так, я не могу редактировать вопрос, я бы с удовольствием это сделал. Теперь, когда его отредактировали, я с радостью сниму свой голос против.

Jeff Martin 14.01.2009 23:52

@Jeff, я сделал общее заявление для будущих противников. Надеюсь, никто не обиделся.

Robert S. 14.01.2009 23:58
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
6
497
6

Ответы 6

вы, вероятно, захотите процитировать «новости» в виде строки ... Вы также, вероятно, захотите вместо этого использовать внутреннее соединение (гораздо более эффективно)

SELECT * FROM table1
INNER JOIN table2 ON table1.user_id = table2.id 
WHERE table1.content = 'news' 
AND table1.content_id = 1

news это какой? Какой-то параметр? Значение поля? Слово, которое должно появиться в поле? Скорее всего, ваш синтаксис неверен, дополнительную информацию см. На страницах операторов W3Schools ГДЕ и W3Schools И / ИЛИ.

  • Как выглядят table1 и table2? Можете ли вы вставить сценарий создания?
  • Я бы рекомендовал СИЛЬНО использовать правильный синтаксис JOIN:

    выберите * из таблицы1 внутреннее соединение table2 на table1.user_id = table2.id ......

  • какие типы данных у "table1.content"?

У вас определенно может быть намного больше, чем просто 2 оператора AND в SQL-запросе - любая база данных, которая действительно поддерживает любой из стандартов SQL-xx, будет поддерживать это ...

позвольте мне переписать это для вас с помощью оператора JOIN, поскольку это уже не 1995 год, вам также нужны цитаты вокруг новостей

SELECT * FROM table1 t1
inner join table2 t2 on t1.user_id = t2.id
AND t1.content = 'news'
AND t1.content_id = 1

Мне понравился ответ cmartin. Кроме того, при необходимости вы можете использовать более одного AND.

Сначала давайте начнем с избавления от этого соединения в старом стиле, чтобы предложения join и where были четко разделены, чтобы облегчить понимание.

SELECT * FROM table1 t1.
JOIN table2 t2
ON t1.user_id = t2.id
WHERE t1.content = news
AND t1.content_id = 1

Теперь давайте обсудим, в чем может быть проблема. Во-первых, какую ошибку вы получаете, поскольку это вполне приемлемый синтаксис? Может быть проблема в том, что вы не заметили, из каких столов должны поступать новости? Если он есть в обеих таблицах, вы можете получить там ошибку. Если новость должна быть значением столбца, вы бы хотели, чтобы она была «новостью», а не новостью. Также может быть, что никакие записи не соответствуют вашим условиям.

Кроме того, использование select * - плохая практика, и его никогда не следует использовать в соединении, поскольку вы возвращаете хотя бы одно поле дважды, а это приводит к расточительству как базы данных, так и сетевых ресурсов. Всегда указывайте только нужные столбцы. Это тратит много ресурсов каждый день, когда ленивые программисты делают это в каждом запросе.

Другие вопросы по теме