我认为MySQL咨询内连接

时间:2015-05-08 03:16:19

标签: php mysql

我认为在具有2个表的MySql查询中存在noob问题。

我正在尝试使用"inner join"在MySql查询中获得评论(评论,答案)的数量30,但是咨询会给我带来244个结果。

表格的名称是comentarios和respuestas, 这些表属于列中的相同服务“T.I”:comentario_serviciorespuesta_servicio

我有16个答案(respuesta_servicio)和14个答案(comentario_servicio),所以正确的查询必须显示30个结果。

这是我的数据。

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

这是我的咨询:

select * from respuestas  join comentarios where comentario_servicio = respuesta_servicio

3 个答案:

答案 0 :(得分: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

UNIONUNION ALL如何运作:What is the difference between UNION and UNION ALL?

答案 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可以有多个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 |

答案 2 :(得分:-1)

试试这个

select * from respuestas inner join comentarios on comentario_servicio = respuesta_servicio