sql >> Database teknologi >  >> Database Tools >> SQLyog

SQL LIMIT efter id kolonne

I stedet for at læse tjenestetabellen direkte, skal du bruge en underforespørgsel og slutte dig til den.

select s.*, u.`fname`, u.`lname`, aif.`airport` FROM 
    ( select * from services order by id limit 2) as s INNER JOIN airports_in_flight aif
    ON s.`id` = aif.`service_id` INNER JOIN users u
    ON s.`service_provider_id` = u.`id`

Afhængigt af din version af mysql, kan du ikke have en underforespørgsel IN med limit og offset (Denne version af MySQL understøtter endnu ikke 'LIMIT &IN/ALL/ANY/SOME subquery'), men dette vil stadig fungere.

EDIT:

Hvis du indstiller den indre forespørgsel til dette:

(SELECT s.id
FROM services s
INNER JOIN airports_in_flight aif
    ON s.`id` = aif.`service_id`
INNER JOIN users u
    ON s.`service_provider_id` = u.`id`
LIMIT 2)

Så vil den kun returnere tjenester med airports_in_flight og brugere (tilføj eventuelt en særskilt klausul).

EDIT for at præcisere:

Lige nu har du dette som dit valg:

select s.*, u.`fname`, u.`lname`, aif.`airport` FROM 
        services as s INNER JOIN airports_in_flight aif
        ON s.`id` = aif.`service_id` INNER JOIN users u
        ON s.`service_provider_id` = u.`id`

Du vil begrænse til 2 tjenester (jeg ved ikke, om du vil have alle tjenester, jeg gætter på kun dem med matchende brugere og lufthavne under flyvning), så du skal sætte grænsen på den rigtige tabel.

I dette tilfælde er den rigtige tabel servicetabellen. For at gøre tingene enkle lad os starte med en forenklet version af det, du har:

SELECT s.*, aif.`airport` FROM 
        services as s 
INNER JOIN airports_in_flight aif ON s.`id` = aif.`service_id`

Jeg vil antage, at der er en lufthavn i flyrækken for hver service (den kompleksitet kan vi tilføje senere).

For at liste de første 2 tjenester vil vi have grænsen for tjenesterne, ikke hele forespørgslen, så det ville være:

SELECT s.*, u.`fname`, u.`lname`, aif.`airport` FROM 
        (select * from services limit 2) as s 
INNER JOIN airports_in_flight aif ON s.`id` = aif.`service_id`

Bemærk, at jeg erstattede tabeltjenesterne med en forespørgsel, som jeg nu kan begrænse, dette er underforespørgslen. Hvis vi nu kun vil se på tjenester, der har en lufthavn i flyvning, skal vi ændre denne underforespørgsel fra:

select * from services limit 2

til

select ss.* from services ss 
inner join airports_in_flight aifs on ss.`in` = aifs.`service_id` limit 2

Jeg har omdøbt tjenesterne og airports_in_flight-tabellerne til ss og aifs, så de ikke kolliderer med navnene i hovedforespørgslen, indsat en indre join-in for at begrænse mine rækker til kun servicetabel og begrænset til 2, så underforespørgslen indsættes i den forespørgsel, vi nu får:

select s.*, u.`fname`, u.`lname`, aif.`airport` 
FROM 
  (select ss.* from services ss 
   inner join airports_in_flight aifs on ss.`in` = aifs.`service_id`
   limit 2) as s 
INNER JOIN airports_in_flight aif ON s.`id` = aif.`service_id`

Du bør derefter være i stand til at udvide underforespørgslen for at tilføje den indre joinforbindelse for brugere (og dermed begrænse tjenester til kun dem, der har airports_in_flight-rækker og brugerrækker), og tilføje brugertabellen til hovedforespørgslen.




  1. gendan faner efter genåbning af SQL Server Management Studio

  2. hvordan kan jeg kryptere en hel kolonne

  3. Synkroniser 2 databaser installeret lokalt med Xampp

  4. Find alle referencer til et objekt i en SQL Server-database