Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Problem Linq to Entities i LEFT OUTER JOIN z relacjami MANY:1

Pracowałem trochę nad dostawcą frameworku encji i przyjrzałem się temu. Uważam, że sam dostawca nie ma w tej sytuacji wyboru. Drzewo poleceń jest tworzone przez strukturę encji i przekazuje je dostawcy w celu skompilowania SQL. To jest kompletne przypuszczenie, ale być może powodem, dla którego generuje on w tej sytuacji sprzężenie LEFT OUTER, jest to, że struktura encji tak naprawdę nie wie, że ograniczenie referencyjne istnieje w bazie danych. Na przykład mogę wejść i zepsuć model jednostki po jego utworzeniu z bazy danych i dodać/zmienić ograniczenia, które nie mają odzwierciedlenia w działaniu bazy danych. Być może z tego powodu projektanci postanowili zachować ostrożność i wyprodukować LEWE ZEWNĘTRZNE złącze „na wszelki wypadek”.

Niemniej jednak wierzę, że możesz uzyskać wewnętrzne połączenie. Na przykład poniższe spowodowało, że dostawca utworzył złącze LEFT OUTER:

var res2 = from a in ent.answers
           select new
           { a.Answer1, a.user.UserName };

Jednak następujące wyniki w połączeniu INNER:

res2 = from a in ent.answers
       join u in ent.users
       on a.UserID equals u.PK
       select new { a.Answer1, u.UserName };

Ponadto następująca encja SQL wytworzyła sprzężenie wewnętrzne:

ObjectQuery<DbDataRecord> dr = ent.CreateQuery<DbDataRecord>( 
         "SELECT a.answer1, u.username " +
         "FROM answers as a inner join users as u on a.userid = u.pk" );



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pokaż Mysql utworzyć ograniczenie?

  2. Jak przekazać wartość bazy danych w hiperłączu za pomocą PHP + HTML

  3. BŁĄD MySQL 1349 Czego mi brakuje?

  4. Wybierz odrębną kolumnę wraz z kilkoma innymi kolumnami w MySQL

  5. Jaka jest różnica między łączeniem oddzielonym przecinkami a łączeniem według składni w MySQL?