2017-01-04 2 views
-1

У меня есть комментарии таблица:как вернуть количество строк в SQL JOIN из первой таблицы

enter image description here

другая таблица обзор:

enter image description here

Я хочу, чтобы отобразить все комментарии данные (в среднем из обзорной таблицы), где совпадают данные о компаниях, городах, штатах, странах и частных = 0.

Я пробовал:

SELECT c.* , p.avg FROM comments c,review p WHERE c.`username`=p.`username` AND c.`company`='10x Technology' AND c.`city`='Libertyville' AND c.`state`='IL' AND c.`country`='USA' AND private=0 

я получаю следующий результат:

enter image description here

Но это неправильно, потому что есть только один тестирование Комментарий.

Есть ли способ, чтобы показать одинаковое количество комментариев, которые соответствуют без повторения

его показ полных строк из таблицы как, я хочу то же строки из таблицы комментариев.

Надеюсь, что я сделал, это легко понять.

Спасибо!

+0

См. Http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql- query – Strawberry

+0

Из четырех записей, которые вы хотели бы получить, и что было бы логикой для его выбора. –

+0

Посмотрите эту документацию о заявлении 'JOIN'. Это должно помочь вам получить только возвращенные строки из одной таблицы. Простой «LEFT JOIN» должен исправить. https://msdn.microsoft.com/en-us/library/zt8wzxy4.aspx – Cataklysim

ответ

0

Вы пытаетесь выбрать одну запись из комментариев в таблице. Но вы также пытаетесь получить все записи соответствия из обзора таблицы. В обзоре таблицы указано имя пользователя «WWW» 5 записей. Таким образом, вы получите записи SQL-Statment 5. Если вы хотите получить только одну запись из табличных комментариев и только из обзора таблицы, попробуйте этот код.

SELECT c.* , 
(select p.avg FROM review p 
where 
p.`username`= c.`username` AND 
p.`company`= c.`company` AND 
p.`city`= c.`city` AND 
p.`state`= c.`state` AND 
p.`country`= c.`country` LIMIT 1) AS avg 

FROM comments c 

WHERE 
c.private=0 

Помните, что у вас есть несколько совпадений в обзоре стола !!!

0

Я предполагаю, что вы хотите последнюю строку из обзора, так что-то подобное может сделать (-ПРИМЕЧАНИЕ, если вы предоставили данные в виде текста, а не изображения, которые я бы обеспечил решение, основанное на данных)

drop table if exists comment; 
create table comment(id int,`comment` varchar(10), company varchar(3), state varchar(3), private int); 

drop table if exists review; 
create table review (id int,avg int,company varchar(3),state varchar(3)); 

insert into comment values (1,'Test','abc','il',0),(1,'Ver','def','il',0); 

insert into review values(1,0,'abc','il'),(2,4,'abc','il'),(3,0,'def','il'); 

MariaDB [sandbox]> select c.*, r.avg 
    -> from comment c 
    -> join review r on c.company = r.company and c.state = r.state 
    -> where c.`comment` = 'Test' and c.private = 0 and 
    -> r.id = (select max(r1.id) from review r1 where r1.company = r.company and r1.state = r.state) 
    -> ; 
+------+---------+---------+-------+---------+------+ 
| id | comment | company | state | private | avg | 
+------+---------+---------+-------+---------+------+ 
| 1 | Test | abc  | il |  0 | 4 | 
+------+---------+---------+-------+---------+------+ 
1 row in set (0.00 sec) 
Смежные вопросы