Mysql 将两个查询合并到一个查询中

Mysql 将两个查询合并到一个查询中,mysql,sql,Mysql,Sql,我想将两个查询合并到一个查询中。我想从姓氏中抽出一封信,寻找以这封信开头的国家。我的询问给了我不止一封信,我不知道为什么 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

我想将两个查询合并到一个查询中。我想从姓氏中抽出一封信,寻找以这封信开头的国家。我的询问给了我不止一封信,我不知道为什么

    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;

首先,将其更改为“内部”,您将更容易阅读:在C.country\u id=CO.country\u id上以CO的身份加入country;其次:您正在从一个表中提取数据,我们看不到数据。如果希望只检索一个结果,则使用不同的

进行考虑。
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;

对于每个国家,DBMS都会评估
WHERE
子句中的标准,从而一次又一次地执行子查询,并生成各种字母,而不是一个字母

使用
交叉连接
提供一个随机字母

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;

首先,将其更改为“内部”,您将更容易阅读:在C.country\u id=CO.country\u id上以CO的身份加入country;其次:您正在从一个表中提取数据,我们看不到数据。如果您想检索一个示例的结果,则使用DISCORDATABASE来自:不管我使用的是连接,还是内部连接,它都是SAMVIES,但是它更容易阅读和理解。你说得对。我提到它是一样的:)