SQL Query über mehrere Tabellen?

Hallo,

ich versuch Daten über mehrere Tabellen aus einer MariaDB mit einem einzelnen SELECT zu lesen.

Als Beispiel dient die MySQL Beispieldatenbank Sakila:
https://dev.mysql.com/doc/sakila/en/

Aus der Datenbank möchte ich Filme laden. Sie sind in der Tabelle "film" gespeichert und haben den Primärschlüssel "film_id".

In dem Select möchte ich auch gleich die Kategorien aus der Tabelle "category" einbeziehen.

Die Verknüpfung zwischen Film und Kategorie funktioniert über die Tabelle "film_category". Es gibt für jeden Film nur eine Kategorie!

Für einfache Beziehungen zu anderen Tabellen bekomme ich das so hin:

SELECT
   f.film_id,
   f.title,
   ft.title as text_title,
   f.description,
   ft.description as text_description,
   f.release_year,
   f.language_id,
   l1.name as language_name,
   f.original_language_id,
   l2.name as original_language_name,
   f.rental_duration,
   f.rental_rate,
   f.length,
   f.replacement_cost,
   f.rating,
   f.special_features,
   f.last_update,
   cat.category_id,
   cat.name as category_name
FROM film as f
LEFT JOIN language as l1 on l1.language_id = f.language_id
LEFT JOIN language as l2 on l2.language_id = f.original_language_id
LEFT JOIN film_text as ft on ft.film_id = f.film_id;

Aber wie mache ich das mit der Zwischentabelle?

Und was wäre der beste Weg, wenn es mehrere Zeilen aus einer anderen Tabelle für einen Film geben würde. Wie es bei den Daten aus der Tabelle "actors" ist?

vielen Dank schonmal...

...zum Beitrag

Freut mich, dass ich helfen konnte. Der Vollständigkeit wegen noch die MariaDB Doku zu GROUP_CONCAT

...zur Antwort
SQL Query über mehrere Tabellen?

Hallo,

ich versuch Daten über mehrere Tabellen aus einer MariaDB mit einem einzelnen SELECT zu lesen.

Als Beispiel dient die MySQL Beispieldatenbank Sakila:
https://dev.mysql.com/doc/sakila/en/

Aus der Datenbank möchte ich Filme laden. Sie sind in der Tabelle "film" gespeichert und haben den Primärschlüssel "film_id".

In dem Select möchte ich auch gleich die Kategorien aus der Tabelle "category" einbeziehen.

Die Verknüpfung zwischen Film und Kategorie funktioniert über die Tabelle "film_category". Es gibt für jeden Film nur eine Kategorie!

Für einfache Beziehungen zu anderen Tabellen bekomme ich das so hin:

SELECT
   f.film_id,
   f.title,
   ft.title as text_title,
   f.description,
   ft.description as text_description,
   f.release_year,
   f.language_id,
   l1.name as language_name,
   f.original_language_id,
   l2.name as original_language_name,
   f.rental_duration,
   f.rental_rate,
   f.length,
   f.replacement_cost,
   f.rating,
   f.special_features,
   f.last_update,
   cat.category_id,
   cat.name as category_name
FROM film as f
LEFT JOIN language as l1 on l1.language_id = f.language_id
LEFT JOIN language as l2 on l2.language_id = f.original_language_id
LEFT JOIN film_text as ft on ft.film_id = f.film_id;

Aber wie mache ich das mit der Zwischentabelle?

Und was wäre der beste Weg, wenn es mehrere Zeilen aus einer anderen Tabelle für einen Film geben würde. Wie es bei den Daten aus der Tabelle "actors" ist?

vielen Dank schonmal...

...zum Beitrag

Das ist relativ simpel: Du joinst film auf film_id mit film_category und das Resultat mit category auf category_id:

select
  film.title,
  category.name 
from
  film inner join film_category using(film_id)
  inner join category using(category_id);

Das zwischen film und category eine one-to-many Relation vorliegt wäre eine Zwischentabelle nicht nötig gewesen, für die Übersicht aber wohl sinnvoll.

...zur Antwort

Oje, Du hast hier einiges falsch verstanden:

  1. Du verschiebst die Daten von der SD Karte sehr sicher nicht in den Hauptspeicher, sondern auf Deine Festplatte.
  2. Bei so einem Vorgang (gerade bei einem modernen OS) hat die CPU sehr wenig zu tun: Die Memory Controller übernehmen hier die Arbeit und Techniken wie DMA erlauben die CPU fast idle zu laufen.

Du kannst die Leistung Deiner CPU auf gar keinen Fall durch eine Schreiboperation auf Deine Festplatte messen. Nutze dafür ein geeignetes Benchmark Programm, beispielsweise speziell für Intel Prozessoren dieses: https://software.intel.com/en-us/articles/intel-power-gadget/

...zur Antwort

Ja kann man! Der Client ist zwar offiziell noch Beta läuft aber einwandfrei. Ich spiele seit Season 3 auf einem MacBook, ohne jegliche Probleme!

Ich persönlich habe aber ein MacBook Pro mit Nvida Karte, mit diesen Intel Grafik Chips geht's auch, aber da lässt die Grafik dann wirklich zu wünschen übrig.

...zur Antwort

Der C# Datentyp decimal arbeitet mit 28-29 signifikanten Stellen.

https://msdn.microsoft.com/de-de/library/364x0z75.aspx

...zur Antwort

Via PowerShell könntest Du das mit dem Get-ChildItem Cmdlet lösen, indem Du über die Tiefe -Depth loopst.

...zur Antwort

Hallo,

Du solltest, wie schon erwähnt ein VBA Userform erstellen. Du kannst dann einstellen, dass Excel selbst verschwindet und nur das Userform angezeigt wird. Hast Du Vorkenntnisse in VBA?

Ansonsten könntest Du Dir mit sehr einfachen Mitteln ein kleines Programm schreiben und ganz auf Excel verzichten (z.B. In C# oder ähnlichem).

Wenn Du keine Vorkenntnisse hast, helfe ich Dir gern bei beiden Varianten.

...zur Antwort

Schreib ne Methode pinRequest(), die immer aufgerufen wird, wenn eine der genannten Vorgänge gestartet wird.

...zur Antwort

Sub Main()
If DCount("DEINE_TABELLE.EINE_ZU_ZÄHLENDE_SPALTE", "DEINE_TABELLE") = 0 Then
MsgBox "Es wurden keine Einträge gefunden!"
Exit Sub
Else
'Weiter mit Deinem Exportmakro
End Sub

...zur Antwort

Ich probiers mal ausführlich und anschaulich.

Du weißt sicher schon, dass Java eine rein objektorientierte Sprache ist, d.h. alles ist Teil einer Klasse. C++ beispielsweise ist zwar objektorientiert, aber nicht so rein wie Java. Die C++ Methode int main() ist Mitglied keiner Klasse. Bei Java gibt es sowas nicht, d.h. es braucht ein class Programm, in der der Einstiegspunkt static void Main() gesetzt werden kann.

Du weißt sicher auch, dass eine "normale" Klasse Instanzen besitzt, die man mich einem Konstruktor deklariert. Diese Instanzen können Methoden und Eigenschaften haben.

Beispielsweise könnte es eine Klasse Autos geben, in der die Methoden fahren(), tanken() etc. und die Eigenschaften Gewicht, Tankvolumen etc. stehen.

Du kannst dann beispielsweise in static void Main() ein neues Auto mittles des Konstruktors deklarieren (es handelt sich hier also um EIN konrketes Objekt), ihm Eigenschaften zuweisen, diese Auslesen und es Sachen (Methoden) machen lassen.

Was machst Du jetzt aber, wenn Du wissen möchtest, wie viele Autos es überhaupt gibt (also wie viele deklarierte Objekte Deine Klasse hat)? Diese Information hängt nicht von einem konkreten Auto ab, sondern ist eine Methode der Klasse. Und eine solche Methode deklariert man als static.

Man kann auch eine ganze Klasse als static deklarieren. Eine solche Klasse hat keine Objekte, sondern nur (wiederum zwingen statische) Methoden und Eigenschaften.

Ein Java Beispiel: Die Klasse Math. Hier finden sich einige mathematische Funktionen (also Methoden). Gucken wir uns mal den Absolutbetrag | | an. Aufgerufen wird er mittels Math.abs(). Sollte der Absolutbetrag eine Methode eines Objekts der Klasse Math sein? Nein, denn ich will für beliebige Variablen double a deren Absolutbetrag erhalten. Also ist die Methode abs() eine static Methode (darauf weißt natürlich schon hin, dass man sie mittels Math.abs()) aufruft.

Ich hoffe, jetzt siehst Du etwas klarer.

...zur Antwort

Bash auf Windows? Das hört sich nicht gut an. Klar, das mag gehen, dafür gemacht ist es nicht.

Guck Dir mal PowerShell an. Ist sogar noch umfangreicher als Bash und ist eine sehr moderne Skriptsprache.

Meiner Meinung nach sogar ein bisschen besser als Bash ;)

...zur Antwort

Mein Tipp: Überall dabei sein!

In Vorlesungen neben Leute setzen, in alle Übungen gehen und mitmachen.

Gerade am Anfang gibt es so viele Angebote für Erstsemester, nimm sie wahr und gehe hin. Wer nicht dabei ist, hat Pech gehabt. Irgendwann kommt der Punkt, an dem alle jemanden kennen. Dann wird es schwerer wo dazu zugehören. Am Anfang geht es aber sehr vielen wie Dir. Sei offen, rede mit Leuten, auch wenn sie Dir am Anfang nicht so vorkommen, als würden sie Deine besten Freunde werden.

Ich hatte zu Beginn relativ viele "Bekannte", mit der Zeit sind es einige, wenige geblieben. Die sind dafür richtige Freunde geworden. Das ist der normale Lauf der Dinge, wenn man etwas Neues anfängt.

...zur Antwort

Hört sich für mich wie die typische Arbeit für einen engagierten Studenten an. Der kann das Ganze sogar aus der Ferne bearbeiten.

Hast Du im Bekannten/Familienkreis keinen jungen Menschen, der sich sein Taschengeld ein bisschen aufbessern möchte?

...zur Antwort

Hallo,

Char Arrays sind Relikte aus der C Zeit, heutzutage solltest Du, es sei denn, Du benutzt irgendwas spezielles, strings verwenden.

Mehr dazu, auch Nachteile des Char Arrays findest Du hier:

http://www.willemer.de/informatik/cpp/string.htm

...zur Antwort

Hallo,

es scheint so, als würden Spotify und Co. dazu die Windows Push Notification Services nutzen. Die sehen aber vor, dass Du von einer Cloud aus eine Notification sendest.

Mehr Infos hier: https://msdn.microsoft.com/de-de/windows/uwp/controls-and-patterns/tiles-and-notifications-windows-push-notification-services--wns--overview

Die Frage ist, ob C# das auch so hinbekommt. Guck Dir mal das hier an: https://msdn.microsoft.com/de-de/library/ms172539(v=vs.90).aspx

Und das hier: https://msdn.microsoft.com/windows/uwp/controls-and-patterns/tiles-and-notifications-choosing-a-notification-delivery-method

...zur Antwort

Guck Dir mal die Methode cin.peek() an. Damit kannst Du eine Vorschau auf den Eingabestrom erzeugen. Wenn das Zeichen nach einem Leerzeichen ein Leerzeichen ist, pusht Du den Eingabestrom einfach nochmal eins weiter.

Die Methode mit alles in ein Array und das Array dann durchsuchen und dann die Leerzeichen löschen ist etwas umständlich und ineffizient.

Mehr dazu hier: http://www.cplusplus.com/reference/istream/istream/peek/

...zur Antwort