我是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)
答案 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是相当气质的广告,不会将所有故障报告为错误-您需要轮询警告。