I have created three tables namely
studentdetails (sid,sname,slname),
books (bid,bname,bprice),
bookingdetails (sid,bid)
sql query
I want to display the student name who has booked dbms book.
JOINS should do the work, like the query below:
SELECT studentdetails.name from books
inner join bookingdetails on bookingdetails.bid = books.bid
inner join studentdetails on studentdetails.id = bookingdetails.sid
where books.name = 'dbms'
Join help us to fetch data from multiple table,so below query can work :
SELECT Slname
FROM studentdetails sd
JOIN BookingDetails bd
ON sd.sid = bd.sid
JOIN books bk
ON bk.bid = bd.bid
AND bk.bname = 'DBMS'
Related
Hello all StackOverFlow families.
I need your help about sql query in mysql. I join four tables but result is duplicate row.
I have tried by using GROUP BY but not work.
Here is my query:
SELECT `tbl_leave`.`id`, `tbl_leave`.`staff_id`, `tbl_leave`.`type_id`, `tbl_leave`.`start_date`, `tbl_leave`.`end_date`,
`tbl_leave`.`total_days`, `tbl_leave`.`reason`, `tbl_leave_type`.`type`, `tbl_employment`.`com_id` as `comid`, `tbl_staff`.`name`
FROM `tbl_leave` JOIN
`tbl_leave_type`
ON `tbl_leave_type`.`id` = `tbl_leave`.`type_id` JOIN
`tbl_employment`
ON `tbl_employment`.`staff_id` = `tbl_leave`.`staff_id` JOIN
`tbl_staff`
ON `tbl_staff`.`id` = `tbl_leave`.`staff_id`
You can look as picture: https://imgur.com/gallery/1Ewku
And this is relationship table: https://imgur.com/gallery/ziKq3
The result I want like this : https://imgur.com/gallery/6NJpR
Thank for your valuable times for this question.
Please try
SELECT distinct `tbl_leave`.`id`, `tbl_leave`.`staff_id`,
`tbl_leave`.`type_id`, `tbl_leave`.`start_date`, `tbl_leave`.`end_date`,
`tbl_leave`.`total_days`, `tbl_leave`.`reason`, `tbl_leave_type`.`type`,
`tbl_employment`.`com_id` as `comid`, `tbl_staff`.`name`
FROM `tbl_leave` JOIN
`tbl_leave_type`
ON `tbl_leave_type`.`id` = `tbl_leave`.`type_id` JOIN
`tbl_employment`
ON `tbl_employment`.`staff_id` = `tbl_leave`.`staff_id` JOIN
`tbl_staff`
ON `tbl_staff`.`id` = `tbl_leave`.`staff_id`;
Please try this solution and let me know if is there any problem occur:
SELECT [Columns] From tbl_staff as staff
JOIN tbl_employment as emp on staff.id = = emp.staff_id
JOIN tbl_leave as leave on staff.id = = leave.staff_id
JOIN tbl_leave_type as ltype on leave.type_id = = ltype.id
DB MODEL
I have Model Which is Connected in above Order Now I want to Select Style Names From Style Table.
Case 1 : I want the Style Names which are both intersecting Category and Gender
Case 2 : I want the Style Names which are intersecting Gender only regardless of category.
I am newbie to SQL is there any efficient way to Get the desired result using SQL JOINS . Any Help in such case will be appreciated or is there any modelling solutions to deal with such type of situations.
Here is how you would join your tables:
SELECT *
FROM `style`
INNER JOIN `StyleCategoryGender` ON `StyleCategoryGender`.`SID` = `style`.`Code`
INNER JOIN `StyleCategoryGender` ON `Category`.`Code` = `StyleCategoryGender`.`GID`
INNER JOIN `StyleCategoryGender` ON `Gender`.`Code` = `StyleCategoryGender`.`CID`
then you can add WHERE clauses as needed
SELECT *
FROM `style`
INNER JOIN `StyleCategoryGender` ON `StyleCategoryGender`.`SID` = `style`.`CODE`
INNER JOIN `StyleCategoryGender` ON `Category`.`Code` = `StyleCategoryGender`.`GID`
INNER JOIN `StyleCategoryGender` ON `Gender`.`Code` = `StyleCategoryGender`.`CID`
WHERE `Gender`.`Name` = 'Female'
I have a MySQL database of contacts with three tables.
person
personContact
personDetails
Each contact shares a primary key called 'ID'
The personContact table contains a value called 'personZip' which happens to be their mailing address zip code.
I'd like to write a SQL query that will give me all the contact data for each person in a specific array of zip codes.
I've written a simple statement to perform an inner join on 2 of the tables:
SELECT * FROM `personContact`
INNER JOIN person
ON personContact.ID=person.ID
I've written a statement to select only the zip codes I need:
SELECT * FROM 'personContact'
WHERE personContact.personZip=12564
OR personContact.personZip=12563
OR personContact.personZip=12522
OR personContact.personZip=12590
OR personContact.personZip=12594
OR personContact.personZip=12533
OR personContact.personZip=12570
OR personContact.personZip=12589
OR personContact.personZip=10509
I'm not sure how to perform two joins, to merge all columns from all three tables.
I'm not sure how to write the query to accommodate both the selection of zip codes and the JOINS.
MySQL errors are not helping me move in the right direction.
You were almost there. Use in which is equivalent to or.
SELECT pc.* --select columns from the other tables as needed.
FROM
`personContact` pc
INNER JOIN person p ON pc.ID = p.ID
INNER JOIN personDetails pd on pd.ID = p.ID
where pc.personzip in (12563, 12522, 10509) -- add more zips as needed
Join all three tables and return all columns while filtering by zip code:
SELECT person.*, personContact.*, personDetails.*
FROM person
INNER JOIN personContact ON personContact.ID = person.ID
INNER JOIN personDetails ON personDetails.ID = person.ID
WHERE personContact.personZip = 12564
OR personContact.personZip = 12563
OR personContact.personZip = 12522
OR personContact.personZip = 12590
OR personContact.personZip = 12594
OR personContact.personZip = 12533
OR personContact.personZip = 12570
OR personContact.personZip = 12589
OR personContact.personZip = 10509
EDIT: Multiple OR statements can be replaced using IN as others have suggested
WHERE personContact.personZip IN (12564, 12563, 12522, 12590 ...)
Im having trouble with my select statement, when run title_two and author_two are not being filled properly by the next title value. Instead they print out the same as b.title and b.author. I've tried declaring them as
`B.title AS title_two`.
SELECT R.bookone, B.title, B.author,
R.booktwo, B.title title_two, B.author author_two,
R.relation, R.relationlike, R.relationdislike
FROM relationships R
INNER JOIN books B ON R.bookone = B.bookid;
there are two tables
relationships which has the following - relationshipid, bookone, booktwo, relation, relationlike, relationdislike
then books which is bookid, title, author, publisher
bookone and booktwo are foreign keys referencing bookid what im trying to acheive is have it so that when a user clicks a link itll come up with every relationship that book has with other books
Use Quotes while using alias
SELECT R.bookone, B.title, B.author,
R.booktwo, B.title as 'title_two', B.author as 'author_two',
R.relation, R.relationlike, R.relationdislike
FROM relationships R
INNER JOIN books B ON R.bookone = B.bookid;
You need to join on books one more time. Something like:
SELECT R.bookone, B1.title, B1.author,
R.booktwo, B2.title title_two, B2.author author_two,
R.relation, R.relationlike, R.relationdislike
FROM relationships R
INNER JOIN books B1 ON R.bookone = B1.bookid
INNER JOIN books B2 ON R.booktwo = B2.bookid
They are doing what they're supposed to do. author_two should be the same as B.author, and title_two should be the same as B.title. They are just aliases.
Also, asking for the same column twice from a single table won't get the next result in the table -- it just returns the same column twice.
If aliasing does not work in your queries, please check if you have included
useOldAliasMetadataBehavior=true
in JDBC connection string.
https://bugs.mysql.com/bug.php?id=33966
The correct format is: ColName as NewColName
SELECT R.bookone as `BookOne`
, ...
FROM relationships R
INNER JOIN books B ON R.bookone = B.bookid;
or simply ( without AS)
SELECT R.bookone `BookOne`
, ...
FROM relationships R
INNER JOIN books B ON R.bookone = B.bookid;
I have entires, equipments, brands, times and seasons.
entries:
id
time
equipment_1
equipment_2
equipments:
id
id_brand
brands:
id
name
times:
id
id_season
seasons:
id
name
My actual SQL query is:
SELECT entries.*, times.id_season AS id_season
FROM entries, seasons
WHERE entries.time = times.id
But in the final query I need the next information that I don't know how to obtain it:
The name for each entries.equipment_ as equipment_1_name and equipment_2_name which is set in brands.name.
The name of the season as season_name.
Thank you in advance!
Assuming you have normalized data. This avoid costly cartesian joins. I never use cartesian joins myself, although there are some cases where they are useful. Not here, though.
SELECT
entries.*,
times.id_seasons AS id_season,
b1.name AS equipment_1_name,
b2.name AS equipment_2_name,
seasons.name AS season_name
FROM entries
LEFT JOIN equipments AS equipments_1
ON equipments_1.id = entries.equipment_1
LEFT JOIN brands AS brands_1
ON brands_1.id = equipments_1.id_brand
LEFT JOIN equipments AS equipments_2
ON equipments_2.id = entries.equipment_2
LEFT JOIN brands AS brands_2
ON brands_2.id = equipments_2.id_brand
LEFT JOIN times
ON times.id = entries.time
LEFT JOIN seasons
ON seasons.id = times.id_season;