2016-06-27 4 views
-2

У меня есть это:Проверьте идентификатор существует в другой таблице

Ключевые слова Структура:

domain_id | keyword_id | keyword | user_owe_id 

test.com | 4  | test |  1 

Рейтинги Структура:

domain_id | rank 

test.com | 2 

Как я возвращать строки только из одной Domain_ID и где user_owe_id = 1

Я имею в виду: «выберите * из рейтинга, где user_owe_id = 1»

и user_owe_id приходит из таблицы ключевых слов, так что я имею в виду я хочу, чтобы получить результаты только тогда, когда user_owe_id = 1 из ключевых слов

как я проверить, если же Domain_ID имеет user_owe_id = 1 из ключевых слов?

+0

^^ провалить на вопросы борту LMAO .. –

+0

Я не downvoter , но я подозреваю, что это связано с тем, что в этом вопросе практически нет исследований по базовому SQL. Это одна из предложенных причин для голосования. Люди имеют право голосовать вверх или вниз по своему усмотрению, независимо от того, является ли это вопросом или ответом. –

ответ

0

Все, что вам нужно, это основной join.

select * 
from 
    Keywords 
    inner join Rankings on -- JOIN the tables. INNER filters to matches only 
     Keywords.domain_id = Rankings.domain_id -- You can add more with AND 
where Keywords.user_owe_id = 1; -- Put non-JOINing filters here 
+0

Спасибо, бог, ты мне ответишь :), теперь я знаю, как перевести его на вопрос PropelORM, я пометил как ответил. –

+0

@Rav_g Спасибо, пожалуйста! –

0

вы можете увидеть, если это оператор возвращает то, что вы хотите

select * from rankings r, (select * from keywords k where user_owe_id=1 limit 1) tol 
where r.domain_id=tot.domain_id 
+0

Зачем вам по умолчанию использовать ненужный беспорядочный подзапрос вместо простого ANSI 'join'? –

+0

Потому что, если я правильно понял, он хочет, чтобы только одна строка формировала таблицу ключевых слов, таблица ключевых слов может иметь несколько user_owe_id с Id = 1 и same domain_id. –

+0

«Как я возвращаю строки только из того же domain_id и где user_owe_id = 1» - я не читаю это как требование только для 1 строки. - next - «Я хочу получать результаты только там, где user_owe_id = 1 из ключевых слов» - это «результат ** s **», множественное число, для меня подразумевает, что нет желания ограничивать только 1 строку. Кроме того, ваше предложение будет фильтроваться в одну строку с использованием непредсказуемого и ненадежного порядка, так как вы не отсортированы - так что даже если OP _did_ хочет сохранить только 1 строку, это может не дать им правильный. –

0

Вы можете сделать что-то вроде этого:

ЗАКАНЧИВАТЬ рабочая скрипку: http://sqlfiddle.com/#!9/69ab0/5

select r.domain_id, r.rank from Rankings r 
     inner join Keywords k on k.domain_id = r.domain_id 
where k.user_owe_id = '1'; 
+0

OP сказал: «Как я возвращаю строки только из того же домена_ид и где user_owe_id = 1». Предполагая, что я правильно это читаю, 'left join' не удовлетворяет только« единственной »части этого, так как он вернет все строки из« Ключевые слова », даже те, которые не имеют соответствия в« Рейтингах ». Но я мог бы неправильно истолковать. –

+0

Да, вы правы, это не должно быть 'left join'. но 'внутренний' –