Объедините 2 запроса в одном - PullRequest
0 голосов
/ 21 января 2019

Я хотел бы объединить 2 запроса в одном. Я хотел бы нарисовать письмо от last_name и искать счетчиков, которые начинаются с этой буквы. Мой запрос дает мне несколько писем, и я не знаю почему.

    SELECT CONCAT(LOWER(SUBSTR(country, 1, LENGTH(country) - 1)), 
           UPPER(substr(country, -1))) AS Kraj,
           COUNT(C.country_id) AS ilosc
FROM city AS C
JOIN country AS CO ON C.country_id = CO.country_id
WHERE country LIKE
    (SELECT CONCAT(LEFT(last_name, 1), '%')
     FROM actor
     ORDER BY RAND()
     LIMIT 1)
GROUP BY C.country_id
HAVING COUNT(C.country_id) > 1;

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Для каждой страны СУБД оценивает критерии в предложении WHERE, таким образом снова и снова подвергая подзапросу и приводя к различным буквам вместо одной.

Используйте CROSS JOIN вместо одной случайной буквы.

SELECT
  CONCAT(LOWER(SUBSTR(country, 1, LENGTH(country) - 1)), UPPER(substr(country, -1))) AS Kraj,
  COUNT(C.country_id) AS ilosc
FROM city AS C
JOIN country AS CO ON C.country_id = CO.country_id
CROSS JOIN 
(
  SELECT CONCAT(LEFT(last_name, 1), '%') AS letter
  FROM actor
  ORDER BY RAND()
  LIMIT 1
) the_one
WHERE country LIKE the_one.letter
GROUP BY C.country_id
HAVING COUNT(C.country_id) > 1;
0 голосов
/ 21 января 2019

во-первых, измените его на INNER_JOIN будет очень удобочитаемым для вас: ПРИСОЕДИНИТЕСЬ к стране, КАК ВКЛ. C.country_id = CO.country_id, второй: вы извлекаете данные из таблиц, которые мы не видим в данных. если вы хотите получить только один результат для примера, который вы берете, рассмотрите возможность использования DISTINCT

SELECT DISTINCT CONCAT(LOWER(SUBSTR(country, 1, LENGTH(country) - 1)), 
       UPPER(substr(country, -1))) AS Kraj,
       COUNT(C.country_id) AS ilosc
FROM city AS C
INNER JOIN country AS CO ON C.country_id = CO.country_id
WHERE country LIKE
    (SELECT CONCAT(LEFT(last_name, 1), '%')
     FROM actor
     ORDER BY RAND()
     LIMIT 1)
GROUP BY C.country_id
HAVING COUNT(C.country_id) > 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...