Почему этот оператор SQL не работает? - PullRequest
1 голос
/ 14 января 2009
SELECT * FROM table1, table2
WHERE table1.user_id = table2.id
AND table1.content = news
AND table1.content_id = 1

, который не будет работать. У вас не может быть два "И" в SQL-выражении ??

// Томек

Ответы [ 6 ]

11 голосов
/ 14 января 2009

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

SELECT * FROM table1
INNER JOIN table2 ON table1.user_id = table2.id 
WHERE table1.content = 'news' 
AND table1.content_id = 1
4 голосов
/ 14 января 2009

news это что? Какой-то параметр? Значение поля? Слово, которое должно встречаться в поле? Скорее всего, ваш синтаксис неправильный, для получения дополнительной информации см. Страницы W3Schools WHERE и W3Schools AND / OR .

3 голосов
/ 14 января 2009

позвольте мне переписать это для вас с помощью оператора 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
1 голос
/ 14 января 2009

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

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

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

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

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

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

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

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

0 голосов
/ 14 января 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...