hier zu zeigen, ist das, was ich erreichen müssen:mysql kann nicht‘Null-Daten erhalten in Abfrage
person_id last_name first_name region_id region name
1 barnum phineas 1 maricopa
2 loman willy 2 pima
2 loman willy 3 pinal
2 loman willy 4 santa cruz
3 kay mary 5 cochise
3 kay mary 6 gila
3 kay mary 7 graham
4 lillian vernon NULL NULL
Hier meine Tabellen sind:
Create database sales
use sales
create table if not exists
`Sales_People`
(`person_id` int primary key,
`last_name` char(16) not null,
`first_name` char(16) not null);
INSERT INTO Sales_people
(`person_id`, `last_name`, `first_name`)
values
('1', 'barnum', 'phineas'),
('2', 'loman', 'willy'),
('3', 'kay', 'mary'),
('4', 'lillian', 'vernon');
create table if not exists
`Sales_Region`
(`region_id` int primary key,
`name` char(16) not null);
INSERT INTO Sales_Region
(`region_id`, `name`)
Values
('1', 'maricopa'),
('2', 'pima'),
('3', 'pinal'),
('4', 'santa cruz'),
('5', 'cochise'),
('6', 'gila'),
('7', 'graham');
create table if not exists
`Sales_People_Region`
(`person_id` int not null,
`region_id` int not null,
constraint spr_pk primary key(person_id, region_id),
constraint spr_fk1 foreign key(person_id)
references Sales_People(person_id),
constraint spr_fk2 foreign key(region_id)
references Sales_Region(region_id));
INSERT INTO Sales_People_Region
(`person_id`, `region_id`)
Values
('1', '1'),
('2', '2'),
('2','3'),
('2', '4'),
('3', '5'),
('3', '6'),
('3','7');
create table if not exists
`Sales`
(`year` int not null,
`month` int not null,
`region_id` int not null,
`amount_sold` decimal(11,2),
constraint s_pk primary key(year, month, region_id),
constraint s_fk foreign key(region_id)
references Sales_Region(region_id));
INSERT INTO Sales
(`year`, `month`, `region_id`, `amount_sold`)
Values
('2016', '01', '1', '800000'),
('2016', '02', '1', '850000'),
('2016', '03', '1', '990000'),
('2016', '01', '2', '425000'),
('2016', '02', '2', '440000'),
('2016', '03', '2', '450000'),
('2016', '01', '3', '200000'),
('2016', '02', '3', '210000'),
('2016', '03', '3', '220000'),
('2016', '01', '4', '50000'),
('2016','02', '4', '52000'),
('2016', '03', '4', '55000'),
('2016', '01', '5', '40000'),
('2016', '02', '5', '41000'),
('2016', '03', '5', '42000'),
('2016', '01', '6', '3000'),
('2016', '02', '6', '31000'),
('2016','03', '6', '32000'),
('2016', '01', '7', '20000'),
('2016', '02', '7', '21000'),
('2016', '03', '7', '22000');
hier ist mein Code:
select sales_people.person_id, `last_name`, `first_name`, sales_region.Region_id,
trim(sales_region.`name`) AS 'Region Name'
from `sales_region`
inner join sales_people_region
on sales_people_region.region_id = sales_region.region_id
inner join sales_people
on sales_people_region.`person_id` = sales_people.`person_id`
group by sales_region.region_id, sales_people.person_id
having sales_people.person_id >= ''
order by sales_people.person_id, sales_region.region_id asc;
was ich bekomme:
person_id last_name first_name Region_id "Region Name"
1 barnum phineas 1 maricopa
2 loman willy 2 pima
2 loman willy 3 pinal
2 loman willy 4 "santa cruz"
3 kay mary 5 cochise
3 kay mary 6 gila
3 kay mary 7 graham
Ich bekomme es nicht, damit ich die letzte person_id sehen kann, weil ihnen keine region_ids zugewiesen sind. In der Tabelle sales_people_region region_id ist ein Primärschlüssel und daher nicht null.
Wenn ich sales_people und Gruppe nach person_id abfrage, kommt sie auf.
dies funktionierte perfekt! vielen Dank! – talesin22