SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 03.10.2017 14:05:06

jron
Завсегдатай
Зарегистрирован: 03.10.2017
Сообщений: 44

ERROR 1052 (23000): Column 'num' in field list is ambiguous

Это учебная база
  Вот скрипт для ее создания
         
[spoiler]


create database sale;     # создание базы данных - продажи
use sale;                 # указываем базу данных , для добавления в нее данных и изменения

# создаем таблицу платежей
/*первое поле `num` - это порядковый номер платежа, оно должно быть уникальным, не должно быть пустым;
   `2`-е поле paydate - дата продажи, не должна быть пустой, обязательна к заполению,
по умолчанию подставляется текущая дата и время, которое берется из системных значений
компьютера, на котором работает данная база данных;
поле receiver - получатель платежа, не должно иметь пустого значения;
поле amount - здесь вводится сумма платежа, поле не должно быть пустым, оно имеет в сумме
`10` разрядов,из них:
`2`-разряда после запятой,
`8`-разрядов цифр перед запятой разрядов"*/


create table payments(num  INT not null,
                      paydate datetime not null default current_timestamp,
                      receiver int not null,
                      amount decimal(10,2) not null,
                      primary key(num),
                      unique(num) );  
# смотрим описание таблицы
desc payments;

# наполняем таблицу


insert into payments (num,paydate,receiver,amount)
               values(1,'2016-10-30 15:00:00',1,35000.5),
                     (2,'2017-11-30 15:25:00',2,25000.5),
                     (3,'2015-11-30 10:25:00',2,15000.5),
                     (4,'2014-11-30 11:25:00',3,10000.5),
                     (5,'2014-11-30 11:25:00',3,10000.5);

# используем, при заполнении таблицы, значение по умолчанию для поля paydate
# поэтому это поле и значения для него опустим из параметров

insert into payments (num,receiver,amount)
               values(6,4,1000.5),
                     (7,2,500.5),
                     (8,3,17000.5),
                     (9,1,100.5),
                     (10,4,15000.5),
                     (11,4,35000.5),
                     (12,2,45000.5),
                     (13,3,55000.5),
                     (14,4,85000.5),
                     (15,4,85000.5),
                     (16,4,85000.5);


# производим выборку всех данных из таблицы payments
select * from payments;

# создаем таблицу получателей
/*первое поле num - это порядковый номер получателя, оно должно быть уникальным, не должно быть пустым;
  `name` - так как это слово зарезервировано, обозначим его обратными кавычками,
обозначим максимальный размер хранимой строки, Указание правильного размера поля таблицы,
может значительно сэкономить занимаемую ею память.
`VARCHAR` - это тип данных - строковые данные переменной длины,сделаем данное поле индексируемым и уникальным
и назначим данному полю первичный ключ;
 
*/


create table receivers( num INT not null,
                       `name` Varchar(255) not null,
                       PRIMARY KEY(`name`), INDEX (`name`), UNIQUE (name));

# смотрим описание таблицы
desc receivers;
 
# наполняем таблицу receivers

     insert into receivers (num,`name`)
               values(1,'ВЭБ'),
                     (2,'АБСОЛЮТ'),
                     (3,'ФОНД СОРЕСА'),
                     (4,'ВАЛЮТНЫЙ РЕЗЕРВНЫЙ ФОНД');
   # производим выборку всех данных из таблицы receivers
select * from receivers;  

           
# Создаем таблицу клиентов
create table clients (num INT,FamilyN Varchar(255),    FirstN Varchar(255), FatherN Varchar(255),
                      PRIMARY KEY(`num`), INDEX (`num`), UNIQUE (num));

# смотрим описание таблицы
desc clients;

# наполняем таблицу clients

 insert into clients (num, familyn,firstn,fathern)
       values(1,'Петровский','Павел','Анатольевич'),
                (2,'Семенова','Алла','Анатольевна'),
                (3,'Пинчук','Владислав','Павлович'),
                (4,'Сергеенко','Павел','Петрович'),
                (5,'Савич','Елена','Александровна'),
                (6,'Осипов','Андрей','Александрович'),
                (7,'Мойсейчик','Анна','Антоновна'),
                (8,'Александровский','Сергей','Викторович'),
                (9,'Пушкин','Александр','Викторович');

 # производим выборку всех данных из таблицы receivers
select * from clients;  
         
 
[/spoiler]

                                        Задача такая

Составьте запрос, который будет получать из таблицы платежей номер, величину платежа, дату и имя получателя, для тех платежей, у которых величина больше средней величины платежа в базе в четыре и более раза.

Написал так и получил ошибку

[spoiler]
mysql> select num as 'номер платежа', amount as 'Величина платежа', paydate as дата, name as 'имя получателя' from payments, receivers rs
    -> where receiver = rs.num and amount >= (select avg(amount) from payments)*4;
ERROR 1052 (23000): Column 'num' in field list is ambiguous
[/spoiler]

В таблицах payments , receivers  - есть поля с одинаковыми названиями   num.
Как же в этом запросе указать, что надо искать.

Пробовал так

Select num.payments ......


Но все равно ошибка.
  Поясниет пожайлуста как исправить ?

Неактивен

 

#2 03.10.2017 14:24:44

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: ERROR 1052 (23000): Column 'num' in field list is ambiguous

payments.num

Неактивен

 

#3 03.10.2017 14:48:36

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2419

Re: ERROR 1052 (23000): Column 'num' in field list is ambiguous

Да, если у вас поле num встречается в нескольких таблицах, в Вашем случае - payments, receivers, то нужно указывать имя таблицы, откуда выбираете - mysql ведь не знает, из какой таблицы Вам нужно это поле.
А чтобы запрос был короче, то лучше использовать алисы таблиц
(только не лучше ни использовать русские символы wink ) - так:
SELECT p.`num` as 'payment_number',
...
FROM  `payments` as p


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#4 03.10.2017 15:40:23

jron
Завсегдатай
Зарегистрирован: 03.10.2017
Сообщений: 44

Re: ERROR 1052 (23000): Column 'num' in field list is ambiguous

Спасибо.

Вот оба варианта

select payments.num as 'номер платежа', amount as 'Величина платежа', paydate as дата, name as 'имя получателя'
from payments, receivers rs
where receiver = rs.num and amount >= (select avg(amount) from payments)*2;
 


select p.num as 'номер платежа', amount as 'Величина платежа', paydate as дата, name as 'имя получателя'
from payments p, receivers rs
where receiver = rs.num and amount >= (select avg(amount) from payments)*2;
 

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson