2015-05-08 3 views
0

Я думаю, что у меня проблема с noob в запросе MySql с двумя таблицами.MySQL консультируется с внутренним соединением. Думаю,

Я пытаюсь получить количество комментариев (комментариев, ответов) в этом случае 30, в запросе MySql, используя "inner join", но справки выдают мне 244 результата.

Названия таблиц Comentarios и respuestas, таблицы принадлежат к одной и той же услуги «T.I» в колонке: comentario_servicio и respuesta_servicio.

У меня есть 16 ответов (respuesta_servicio) и 14 комментов (comentario_servicio), поэтому правильный запрос должен показать мне 30 результатов.

Вот мои данные.

http://sqlfiddle.com/#!2/86b03/1

Это мой советоваться:

select * from respuestas join comentarios where comentario_servicio = respuesta_servicio 
+0

вы можете показать образец данных? возможно, в [sqlFiddle] (http://sqlfiddle.com). обычно, если вы получаете больше ожидаемых результатов, это связано с неожиданным перекрестным соединением. – Sean

+0

Спасибо человеку за внимание. Мне действительно нужно увидеть некоторые учебники, чтобы понять, что такое sqlFiddle и как это работает, но это было интересно благодаря человеку. Консультирование теперь бросает мне 244. Вот ссылка: http://sqlfiddle.com/#!2/86b03/1 –

+0

основывается на ваших данных в sqlFiddle, я думаю, что ваш запрос должен быть - 'SELECT * FROM respuestas INNER JOIN comentarios ON id_comentario = respuesta_comentario' - http://sqlfiddle.com/#!2/b1510a/2 – Sean

ответ

1

Если вы ищете 30 результатов, которые будут представлять собой комбинацию всех записей из две таблицы, то вы, вероятно, захотите изучить запрос UNION.

Используя предоставленные вами таблицы, вот как может выглядеть запрос. Ключ к UNION имеет столбцы с тем же именем, поэтому во второй половине есть значение NULL.

SELECT 
    id_respuestas `id` 
    ,respuesta_servicio `servicio` 
    ,respuesta_usuario `usuario` 
    ,respuesta_respuesta `text` 
    ,respuesta_comentario `related_comment` 
    ,respuesta_fecha `fecha` 
    ,'Respuestas' `type` -- one way to identify the type of record 
FROM 
    respuestas 

union 

SELECT 
    id_comentario `id` 
    ,comentario_servicio `servicio` 
    ,comentario_usuario `usuario` 
    ,comentario_comentario `text` 
    ,NULL `related_comment` 
    ,comentario_fecha `fecha` 
    ,'Comentario' `type` -- one way to identify the type of record 
FROM 
    comentarios 

Работающий SQL Скрипки: http://sqlfiddle.com/#!2/86b03/19

Как UNION и UNION ALL работы: What is the difference between UNION and UNION ALL?

-1

Попробуйте

select * from respuestas inner join comentarios on comentario_servicio = respuesta_servicio 
+0

О, спасибо, человек, спасибо за ответ, но бросает мне тот же результат моих консультаций. –

+0

Он должен работать. Если это не так, вам нужно показать нам структуры обеих таблиц. –

+0

Еще раз спасибо человеку за ответ. Это структура моих таблиц: http://sqlfiddle.com/#!2/86b03/1 –

0

Как и другие сказали, если вы хотите 30 записей, как результат, вы ищете UNION, а не JOIN , Так что попробуйте это:

select 
    'Comentario' `Table` 
    ,id_comentario `id_comentario` 
    ,0 `id_respuestas` 
    ,comentario_servicio `servicio` 
    ,comentario_usuario `usuario` 
    ,comentario_comentario `text` 
    ,comentario_fecha `fecha` 
from comentarios 
union 
select 
    'Respuestas' `Table` 
    ,respuesta_comentario `id_comentario` 
    ,id_respuestas `id_respuestas` 
    ,respuesta_servicio `servicio` 
    ,respuesta_usuario `usuario` 
    ,respuesta_respuesta `text` 
    ,respuesta_fecha `fecha` 
from respuestas 
order by `id_comentario`,`id_respuestas` 

http://sqlfiddle.com/#!2/86b03/23

Если вы действительно хотите JOIN, вы получите только 20 результатов. Во-первых, вы не используете правую клавишу для связывания своих таблиц. Servicio - T.I. везде, поэтому вы получаете 224 результата (16 * 14 = 224 ... не 244 :)). Итак, если я правильно понимаю вашу структуру, отношение 1 для многих ... 1 Comentario can hav multiple Respuestas. Если это так, вы получите 20 результатов. Во-вторых, вам нужно использовать OUTER JOIN. Кроме того, если вы хотите получить рекорды для T.I. «servicio», добавьте WHERE comentario_servicio = 'T.I.' после заявления SELECT. Так что смотрите на этом примере:

SQL Fiddle

MySQL 5.5 Настройка схемы:

CREATE TABLE `comentarios` (
    `id_comentario` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `comentario_servicio` varchar(45) NOT NULL, 
    `comentario_usuario` varchar(45) NOT NULL, 
    `comentario_comentario` varchar(500) NOT NULL, 
    `comentario_fecha` varchar(45) NOT NULL, 
    PRIMARY KEY (`id_comentario`) 
); 

INSERT INTO `comentarios` (`id_comentario`, `comentario_servicio`, `comentario_usuario`, `comentario_comentario`, `comentario_fecha`) VALUES (46,'T.I','paulnoris','Increible servicio','2015-05-04, 1:50'),(47,'T.I','paulnoris','Al igual que mi compañero estoy muy contento con los resultados que ah tenido la pagina','2015-05-04, 1:59'),(48,'T.I','paulnoris','Asi es estamos contentos con los resultados de la pagina en tan poquito tiempo todo lo que hemos ava','2015-05-04, 2:07'),(49,'T.I','paulnoris','Asi es estamos contentos con los resultados de la pagina en tan poquito tiempo todo lo que hemos ava\r\nquisiera poder escribir muchisimas cosas mas pero pues se entiende que aveces no se puede','2015-05-04, 2:09'),(50,'T.I','paulnoris','veamos cual es el limite de comentarios que puedo hacer si nomas se supone que son 200 letras aver que tanto es porque esta cabron saber cuantas son sin escribirlas todas veamos ya me canse y ya me qu','2015-05-04, 2:10'),(51,'T.I','paulnoris','el alex se la come cruda','2015-05-04, 10:10'),(52,'T.I','paulnoris','se la come el alex','2015-05-04, 13:17'),(53,'T.I','paulnoris','lorem dsad djsaiod jiodjsaoi daojdjroig joid sjoidjs aiodj idjoasisjd osidj aiodj aosijd oiajdos ijdiojigjg fioj giofdjgoifjgoifdj goijaoidj aoisdsaiodjs adiosj diaj dioj iogjfdoigd jgoidfjoisdjdfsdf ','2015-05-06, 11:03'),(54,'T.I','papanoel','Hola amigos tengo una duda sobre si puedo integrarme a otros servicios perteneciendo ya a este','2015-05-06, 12:15'),(55,'T.I','paulnoris','El manchado me la pela','2015-05-06, 13:37'),(56,'T.I','paulnoris','El gilberto se la come cruda','2015-05-06, 16:18'),(57,'T.I','paulnoris','El oswaldo es gay','2015-05-06, 16:19'),(58,'T.I','paulnoris','jasidoja diosajdas','2015-05-06, 18:09'),(59,'T.I','paulnoris','dsadsadsadsada','2015-05-06, 22:08'); 


CREATE TABLE `respuestas` (
    `id_respuestas` int(11) NOT NULL AUTO_INCREMENT, 
    `respuesta_usuario` varchar(45) NOT NULL, 
    `respuesta_servicio` varchar(45) NOT NULL, 
    `respuesta_respuesta` varchar(500) NOT NULL, 
    `respuesta_comentario` int(11) NOT NULL, 
    `respuesta_fecha` varchar(45) NOT NULL, 
    PRIMARY KEY (`id_respuestas`) 
); 

INSERT INTO `respuestas` (`id_respuestas`, `respuesta_usuario`, `respuesta_servicio`, `respuesta_respuesta`, `respuesta_comentario`, `respuesta_fecha`) VALUES (8,'paulnoris','T.I','blabla',53,'2015-05-06, 11:43'),(9,'paulnoris','T.I','a',53,'2015-05-06, 11:45'),(10,'paulnoris','T.I','b',53,'2015-05-06, 11:45'),(11,'paulnoris','T.I','c',53,'2015-05-06, 11:45'),(12,'paulnoris','T.I','t',52,'2015-05-06, 11:45'),(13,'paulnoris','T.I','q',52,'2015-05-06, 11:45'),(14,'paulnoris','T.I','y',52,'2015-05-06, 11:45'),(15,'paulnoris','T.I','dsdasda',51,'2015-05-06, 11:51'),(16,'papanoel','T.I','blablabla',53,'2015-05-06, 12:00'),(17,'papanoel','T.I','asi es viejon echale ganas',50,'2015-05-06, 12:00'),(18,'paulnoris','T.I','Desafortunadamente no mi amigo tienes que aba',54,'2015-05-06, 12:16'),(19,'paulnoris','T.I','djsidjo dsaidjoa',55,'2015-05-06, 13:37'),(20,'paulnoris','T.I','Si se la come cruda',56,'2015-05-06, 16:18'),(21,'paulnoris','T.I','Si vale madre es gay',57,'2015-05-06, 16:19'),(22,'paulnoris','T.I','jidsojd iodjs',58,'2015-05-06, 18:10'),(23,'paulnoris','T.I','rgtgrgdgf',59,'2015-05-06, 22:08'); 

Запрос 1:

select * from comentarios 
left outer join respuestas on id_comentario = respuesta_comentario 

Results:

| id_comentario | comentario_servicio | comentario_usuario |                                             comentario_comentario | comentario_fecha | id_respuestas | respuesta_usuario | respuesta_servicio |       respuesta_respuesta | respuesta_comentario | respuesta_fecha | 
|---------------|---------------------|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------|---------------|-------------------|--------------------|-----------------------------------------------|----------------------|-------------------| 
|   46 |     T.I |   paulnoris |                                              Increible servicio | 2015-05-04, 1:50 |  (null) |   (null) |    (null) |          (null) |    (null) |   (null) | 
|   47 |     T.I |   paulnoris |                             Al igual que mi compañero estoy muy contento con los resultados que ah tenido la pagina | 2015-05-04, 1:59 |  (null) |   (null) |    (null) |          (null) |    (null) |   (null) | 
|   48 |     T.I |   paulnoris |                          Asi es estamos contentos con los resultados de la pagina en tan poquito tiempo todo lo que hemos ava | 2015-05-04, 2:07 |  (null) |   (null) |    (null) |          (null) |    (null) |   (null) | 
|   49 |     T.I |   paulnoris |   Asi es estamos contentos con los resultados de la pagina en tan poquito tiempo todo lo que hemos ava quisiera poder escribir muchisimas cosas mas pero pues se entiende que aveces no se puede | 2015-05-04, 2:09 |  (null) |   (null) |    (null) |          (null) |    (null) |   (null) | 
|   50 |     T.I |   paulnoris | veamos cual es el limite de comentarios que puedo hacer si nomas se supone que son 200 letras aver que tanto es porque esta cabron saber cuantas son sin escribirlas todas veamos ya me canse y ya me qu | 2015-05-04, 2:10 |   17 |   papanoel |    T.I |     asi es viejon echale ganas |     50 | 2015-05-06, 12:00 | 
|   51 |     T.I |   paulnoris |                                             el alex se la come cruda | 2015-05-04, 10:10 |   15 |   paulnoris |    T.I |          dsdasda |     51 | 2015-05-06, 11:51 | 
|   52 |     T.I |   paulnoris |                                              se la come el alex | 2015-05-04, 13:17 |   12 |   paulnoris |    T.I |            t |     52 | 2015-05-06, 11:45 | 
|   52 |     T.I |   paulnoris |                                              se la come el alex | 2015-05-04, 13:17 |   13 |   paulnoris |    T.I |            q |     52 | 2015-05-06, 11:45 | 
|   52 |     T.I |   paulnoris |                                              se la come el alex | 2015-05-04, 13:17 |   14 |   paulnoris |    T.I |            y |     52 | 2015-05-06, 11:45 | 
|   53 |     T.I |   paulnoris | lorem dsad djsaiod jiodjsaoi daojdjroig joid sjoidjs aiodj idjoasisjd osidj aiodj aosijd oiajdos ijdiojigjg fioj giofdjgoifjgoifdj goijaoidj aoisdsaiodjs adiosj diaj dioj iogjfdoigd jgoidfjoisdjdfsdf | 2015-05-06, 11:03 |    8 |   paulnoris |    T.I |          blabla |     53 | 2015-05-06, 11:43 | 
|   53 |     T.I |   paulnoris | lorem dsad djsaiod jiodjsaoi daojdjroig joid sjoidjs aiodj idjoasisjd osidj aiodj aosijd oiajdos ijdiojigjg fioj giofdjgoifjgoifdj goijaoidj aoisdsaiodjs adiosj diaj dioj iogjfdoigd jgoidfjoisdjdfsdf | 2015-05-06, 11:03 |    9 |   paulnoris |    T.I |            a |     53 | 2015-05-06, 11:45 | 
|   53 |     T.I |   paulnoris | lorem dsad djsaiod jiodjsaoi daojdjroig joid sjoidjs aiodj idjoasisjd osidj aiodj aosijd oiajdos ijdiojigjg fioj giofdjgoifjgoifdj goijaoidj aoisdsaiodjs adiosj diaj dioj iogjfdoigd jgoidfjoisdjdfsdf | 2015-05-06, 11:03 |   10 |   paulnoris |    T.I |            b |     53 | 2015-05-06, 11:45 | 
|   53 |     T.I |   paulnoris | lorem dsad djsaiod jiodjsaoi daojdjroig joid sjoidjs aiodj idjoasisjd osidj aiodj aosijd oiajdos ijdiojigjg fioj giofdjgoifjgoifdj goijaoidj aoisdsaiodjs adiosj diaj dioj iogjfdoigd jgoidfjoisdjdfsdf | 2015-05-06, 11:03 |   11 |   paulnoris |    T.I |            c |     53 | 2015-05-06, 11:45 | 
|   53 |     T.I |   paulnoris | lorem dsad djsaiod jiodjsaoi daojdjroig joid sjoidjs aiodj idjoasisjd osidj aiodj aosijd oiajdos ijdiojigjg fioj giofdjgoifjgoifdj goijaoidj aoisdsaiodjs adiosj diaj dioj iogjfdoigd jgoidfjoisdjdfsdf | 2015-05-06, 11:03 |   16 |   papanoel |    T.I |          blablabla |     53 | 2015-05-06, 12:00 | 
|   54 |     T.I |   papanoel |                           Hola amigos tengo una duda sobre si puedo integrarme a otros servicios perteneciendo ya a este | 2015-05-06, 12:15 |   18 |   paulnoris |    T.I | Desafortunadamente no mi amigo tienes que aba |     54 | 2015-05-06, 12:16 | 
|   55 |     T.I |   paulnoris |                                             El manchado me la pela | 2015-05-06, 13:37 |   19 |   paulnoris |    T.I |        djsidjo dsaidjoa |     55 | 2015-05-06, 13:37 | 
|   56 |     T.I |   paulnoris |                                            El gilberto se la come cruda | 2015-05-06, 16:18 |   20 |   paulnoris |    T.I |       Si se la come cruda |     56 | 2015-05-06, 16:18 | 
|   57 |     T.I |   paulnoris |                                              El oswaldo es gay | 2015-05-06, 16:19 |   21 |   paulnoris |    T.I |       Si vale madre es gay |     57 | 2015-05-06, 16:19 | 
|   58 |     T.I |   paulnoris |                                              jasidoja diosajdas | 2015-05-06, 18:09 |   22 |   paulnoris |    T.I |         jidsojd iodjs |     58 | 2015-05-06, 18:10 | 
|   59 |     T.I |   paulnoris |                                               dsadsadsadsada | 2015-05-06, 22:08 |   23 |   paulnoris |    T.I |          rgtgrgdgf |     59 | 2015-05-06, 22:08 | 
+0

Доблестное усилие. Но я думаю, вы пропустили это. :-( – Strawberry

+0

Да ... может быть ... Я отредактировал ответ ... :) –

Смежные вопросы