none
Sql Abfrage in 2 Tabellen in mehreren Columns RRS feed

  • Frage

  • Einen wunderschönen guten Abend

    ich hoffe sie können mir vlt helfen.

    Ich benötige eine SQL abfrage und hoffe nicht das ich mich daran übernommen habe und es gar nicht möglich ist.

    Zur vereinfachung habe ich ihnen mal eine sql dazu gelegt woraus man vlt erkennen kann was ich vor habe .

    Es wird versucht aus 2 tabellen zu lesen. A und B

    in der tabelle A steht (SKU, entity_Id(AI) )

    ich besitze die Sku für die entity_id aus tabelle A

    mit der entity_id aus tabelle A kann ich ein Item aus Tabelle B

    in Tabelle B (value_id (AI) , attribute_id, entity_id, value )

    in der spalte value können 3 werte drin stehen

    1. img_path => attribute_id = 109
    2. wareHouseCode => attribute_id = 967
    3. designNumb => attribute_id = 972

    Ich möchte die Sku eingeben und alle Sku's mit gleicher designNumb haben.

    Ansicht z.b
    SKU | wareHouseCode | img_path | designNumb
    ---- |-----------------------|----------------|------------------
    458 | w3r5e7b8 | 4/z/im.img | 5688
    698 | w3r4e7b8 | 5/i/im.img | 5688
    985 | w3r5e7b8 | 8/e/im.img | 5688985 | w3r7e7b7 | 8/e/im.img | 5688


    .
    .
    .

    SELECT
    db357008_71.catalog_product_entity.sku as sku,
    db357008_71.catalog_product_entity_varchar.value as designNumb,
    db357008_71.catalog_product_entity_varchar.value as warehouseCode,
    db357008_71.catalog_product_entity_varchar.value as img_path
    FROM
    db357008_71.catalog_product_entity
    
    INNER JOIN
    db357008_71.catalog_product_entity_varchar
    on
    db357008_71.catalog_product_entity.entity_id = db357008_71.catalog_product_entity_varchar.entity_id
    
    INNER JOIN
    db357008_71.catalog_product_entity_varchar as designNumb on db357008_71.catalog_product_entity_varchar.attribute_id = 972
    
    INNER JOIN
    db357008_71.catalog_product_entity_varchar as warehouseCode on db357008_71.catalog_product_entity_varchar.attribute_id = 967
    
    INNER JOIN
    db357008_71.catalog_product_entity_varchar as img_path on db357008_71.catalog_product_entity_varchar.attribute_id = 109
    
    WHERE
    db357008_71.catalog_product_entity.sku = '4212407'
    ;

    Ich würde mich freuen wennmir jemand helfen könnte und falls noch Informationen benötigt werden müsst ihr mir es sagen.

    mfg deepkey



    Dienstag, 5. Februar 2019 16:52

Antworten

Alle Antworten

  • Hi,

    so ganz allgemein würde ich sagen:

    SELECT e.sku     AS sku,
           ev1.value AS designNumb,
           ev2.value AS warehouseCode,
           ev3.value AS img_path
    FROM   db357008_71.catalog_product_entity e
           INNER JOIN db357008_71.catalog_product_entity_varchar ev1 ON e.entity_id = ev1.entity_id AND ev1.attribute_id = 972
           INNER JOIN db357008_71.catalog_product_entity_varchar ev2 ON e.entity_id = ev2.entity_id AND ev2.attribute_id = 967
           INNER JOIN db357008_71.catalog_product_entity_varchar ev3 ON e.entity_id = ev3.entity_id AND ev3.attribute_id = 109
    WHERE  e.sku = '4212407'

    Um das aber mit Bestimmtheit sagen zu können, poste bitte die CREATE TABLE Statements der beiden Tabellen, dazu INSERT INTO Statements einiger Beispieldaten und passend zu den Beispieldaten dann die gewünschten Ergebnisse.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Dienstag, 5. Februar 2019 17:50
    Moderator
  • Also vorab ein Großes Danke für die schnelle Antwort.

    hat die Aufgabe aber noch nicht komplett gelöst.


    vorab die vorhandenen geforderten daten

    create der tables

    SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
    SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
    SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
    
    -- -----------------------------------------------------
    -- Schema mydb
    -- -----------------------------------------------------
    -- -----------------------------------------------------
    -- Schema db357008_71
    -- -----------------------------------------------------
    
    -- -----------------------------------------------------
    -- Schema db357008_71
    -- -----------------------------------------------------
    CREATE SCHEMA IF NOT EXISTS `db357008_71` DEFAULT CHARACTER SET utf8 ;
    USE `db357008_71` ;
    
    -- -----------------------------------------------------
    -- Table `db357008_71`.`catalog_product_entity`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `db357008_71`.`catalog_product_entity` (
      `entity_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Entity ID',
      `entity_type_id` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Entity Type ID',
      `attribute_set_id` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Attribute Set ID',
      `type_id` VARCHAR(32) NOT NULL DEFAULT 'simple' COMMENT 'Type ID',
      `sku` VARCHAR(64) NULL DEFAULT NULL COMMENT 'SKU',
      `created_at` TIMESTAMP NULL DEFAULT NULL COMMENT 'Creation Time',
      `updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT 'Update Time',
      `has_options` SMALLINT(6) NOT NULL DEFAULT '0' COMMENT 'Has Options',
      `required_options` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Required Options',
      PRIMARY KEY (`entity_id`))
    ENGINE = InnoDB
    AUTO_INCREMENT = 14856
    DEFAULT CHARACTER SET = utf8
    COMMENT = 'Catalog Product Table';
    
    
    
    -- -----------------------------------------------------
    -- Table `db357008_71`.`catalog_product_entity_varchar`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `db357008_71`.`catalog_product_entity_varchar` (
      `value_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'Value ID',
      `entity_type_id` INT(10) UNSIGNED NOT NULL COMMENT 'Entity Type ID',
      `attribute_id` SMALLINT(5) UNSIGNED NOT NULL COMMENT 'Attribute ID',
      `store_id` SMALLINT(5) UNSIGNED NOT NULL COMMENT 'Store ID',
      `entity_id` INT(10) UNSIGNED NOT NULL COMMENT 'Entity ID',
      `value` VARCHAR(255) NULL DEFAULT NULL COMMENT 'Value',
      PRIMARY KEY (`value_id`))
    ENGINE = InnoDB
    AUTO_INCREMENT = 937991
    DEFAULT CHARACTER SET = utf8
    COMMENT = 'Catalog Product Varchar Attribute Backend Table';
    
    
    SET SQL_MODE=@OLD_SQL_MODE;
    SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
    SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
    


    insert ergeben sich ein wenig aus den bilder die folgen. es sind noch andere unrelevante daten mit bei.


    das ist die ausgabe des codes vom Herrn Falz, wenn ich sie so direkt benennen darf

    (diebezüglich muss ich noch warten , ich darf noch keine bilder hochladen)

    aber es hat gepasst nur hat er nur von der einen nummer alles gesucht und eseinmal wiederholt,

    die aufteilung ist super , die wiederholung verstehe ich hingegen leider nicht.


    hier wie die daten wie sie ca in der Entity_varchar gespeichert sind (um die die es sich handelt)

    -------------------------------------------------------

    entity_id  |  attribute_id  |  value

    --------------------------------------------

    404         |      109           | /3/3/33291b1_1.jpg

    404         |      967           | w1r1e6b2

    404         |      972           | 3004-3065-93792

    -------------------------------------------------------------

    jede `entity_id` hat verschiedene values die aber jedes mal die selbe `attribute_id` haben

    /3/3/33291b1_1.jpg  = immer adresse für bild und attribute_id 109

    usw

    mit der entity_id ist der zuweis zu der sku

    die wie folgt gespeichert aussehen

    ----------------------------

    entity_id    |   sku

    ----------------------

      404          |  65987

      405          |  66284

    ------------------------

    tabellen zusammen geführt über die entity_id

    ich möchte das wenn ich eine sku eingebe,

    1. sucht mir alle anderen sku mit der selben die designId(value = attribute_id -> 972) von gesuchter sku

    2. anzeigen des  jeweiligen warehouseCodes und jpg path

    die designnummer dazu stehen zu haben daneben wärenicht schlecht auch wenns die selbe ist.


    ich hoffe das hilft fürs verständnis und entschuldigt das nicht beachten von groß und klein schreibung



    Dienstag, 5. Februar 2019 18:40
  • Einen schönen guten Morgen.

    Anscheinend war es gestern ziemlich lange alles und auch schon ziemlich spät.

    Ich habe dann eben noch einmal rüber geschaut und mir ist dann aufgefallen dass dieLösung direkt vor mir lag.

    Ich habe doch schon eine Query die mir alle Sku's zurück gegeben hat mit der selben DesignNumb.

    Also habe ich den Code von Herrn Falz genommen und mit meinen erweitert.

    Sind jetzt zwei verschiedene Codestyles '-'

    SELECT e.sku     AS sku,
           ev1.value AS designNumb,
           ev2.value AS warehouseCode,
           ev3.value AS img_path
    FROM   db357008_71.catalog_product_entity as e
           INNER JOIN db357008_71.catalog_product_entity_varchar ev1 ON e.entity_id = ev1.entity_id AND ev1.attribute_id = 972
           INNER JOIN db357008_71.catalog_product_entity_varchar ev2 ON e.entity_id = ev2.entity_id AND ev2.attribute_id = 967
           INNER JOIN db357008_71.catalog_product_entity_varchar ev3 ON e.entity_id = ev3.entity_id AND ev3.attribute_id = 109
    WHERE  e.sku 
    IN 
    (SELECT `sku` 
    from `catalog_product_entity` 
    Where `entity_id` 
    in 
    (SELECT `entity_id` 
    from `catalog_product_entity_varchar` 
    where `value` 
    =(Select `value` 
    from `catalog_product_entity_varchar` 
    where `entity_id` 
    = (Select `entity_id` 
    from `catalog_product_entity` 
    where `sku` = 'k0059' 
    and `attribute_id` = 972))))
    GROUP BY e.sku;

    und die ausgabe ist perfekt.

    Danke nochmal für die schnelle und perfekte hilfe.

    Wenn jemand Lust hat die SQL nochmal sauber zu schreiben darf das gerne machen;)

    würde ich gerne annehmen.

    LG

    Mittwoch, 6. Februar 2019 07:10
  • Hi,

    das ist MySQL, nicht Microsoft SQL Server. Da es teilks gravierende Unterschiede zwichen den Systemen gibt, w#re es wohl sinnvoller, die Frage in einem MySQL Forum zu stellen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Mittwoch, 6. Februar 2019 07:12
    Moderator
  • Deswegen meinte ich ja .

    wenn jemand den unteren teil noch ordentlich ,passend zum oberen , anpassen könnte , wäre es sehr lieb.

    Ich muss dazu sagen das es so trotzdem funktioniert auf der workbench

    Mittwoch, 6. Februar 2019 08:52