MySQL初学者,请求出了点问题

时间:2019-04-22 14:57:17

标签: mysql sql

我是MySQL的新手,如果问题很愚蠢,请原谅我。 我有2个表(实际上是3个表),并加载了csv文件中的数据,如下所示:

-- Création de la base
CREATE DATABASE PaysVillesLangues CHARACTER SET 'utf8';

USE PaysVillesLangues;

-- Création table pays
CREATE TABLE pays (
  code CHAR(3) NOT NULL,
  nom_pays VARCHAR(255) NOT NULL,
  continent ENUM('Asia','Europe','North America','Africa','Oceania',
                 'Antartica','South America')
           NOT NULL,
  region VARCHAR(255) NULL,
  aire DECIMAL(9,2) NULL,
  independance INT NULL,
  population INT NULL,
  esperance_vie DECIMAL(2,1) NULL,
  gnp DECIMAL(12,2) NULL,
  gnp_ancien DECIMAL(12,2) NULL,
  nom_local VARCHAR(255) NULL,
  gouvernement VARCHAR(255) NULL,
  chef_etat VARCHAR(255) NULL,
  capitale INT NOT NULL,
  code2 VARCHAR(2) NULL,
  PRIMARY KEY (code)
  );

-- Chargement des données depuis le fichier pays.csv
LOAD DATA LOCAL 
  INFILE '/mnt/travail/Lycee/2019/Formation NSI/Projet BDR/MySQL/pays.csv' 
  INTO TABLE pays 
  FIELDS TERMINATED BY ';' 
  LINES TERMINATED BY '\n';

-- Création de la table langues
CREATE TABLE langues (
  code_pays CHAR(3) NOT NULL,
  langue VARCHAR(100) NOT NULL,
  officiel ENUM('T','F') NULL,
  pourcentage DECIMAL(3,1),
  PRIMARY KEY (langue)
  );

-- Chargement des données depuis le fichier langues.csv
LOAD DATA LOCAL 
  INFILE '/mnt/travail/Lycee/2019/Formation NSI/Projet BDR/MySQL/langues.csv' 
  INTO TABLE langues 
  FIELDS TERMINATED BY ';' 
  LINES TERMINATED BY '\n';

因此,我有这两个表,其中包含有关国家和语言的信息。我想找到所有说法语的国家。所以我输入了这个请求:

SELECT nom_pays
  FROM pays INNER JOIN langues ON pays.code = langues.code_pays
  WHERE langue = 'French';

但是我没有任何信息(我应该得到24行)。

我做错了什么?

如果可以的话,我将不胜感激:-)

- 尼古拉斯·弗朗索瓦斯(NicolasFRANÇOIS)

3 个答案:

答案 0 :(得分:1)

更新:谢谢您,我解决了我的问题。

csv文件中不需要的空格没有特别的问题,但是文件中存在一些不一致的地方(错误放置的字段...)。

感谢您在调试我的案子方面的帮助。

\再见

-

NicolasFRANÇOIS

答案 1 :(得分:0)

发生这种情况是由于文件中加载了数据。将值加载到表中时,会在值后面添加空格。

因此,尝试在文件中加载数据后使用修剪更新。

UPDATE langues SET code_pays=TRIM(code_pays),langue=TRIM(langue),officiel=TRIM(officiel), pourcentage=TRIM(pourcentage);

对您的pays表做同样的事情

谢谢。

答案 2 :(得分:-1)

如果您的SQL本质上有问题,您可能会收到一条难看的错误消息-并查看您在此处显示的内容,我认为这没什么问题,因此,如果您的查询未提供您期望的结果,则可能与数据有关。

尝试展开联接以查找问题:

SELECT pays_code, langue
FROM langues
WHERE langue = 'French';

记下返回的代码(如果有的话),然后使用其中的一些代替“ .a”,“ b”。...

SELECT code, nom_pays
FROM pays
WHERE code IN ('a', 'b')
WHERE code IN (1,2,3);

从内存来看,LOAD DATA INFILE是相当气质的广告,不会将所有故障报告为错误-您需要轮询警告。